我有以下有效的代码-

$(function(){
    $('#testbutton').click(function(){
        var checkedValue = $('[name="someRadioGroup"]:radio:checked').val();
        $('#result').html('The radio element with value <tt>' + checkedValue + '</tt> is checked');
    });
});

我知道$('#testbutton')会获取ID为testbutton的HTML元素,并为其分配事件处理程序。

但是我不明白为什么我需要将该代码放入函数文字中?

如果我删除了$(function(){(和相应的});),它将不起作用。

但是,其他代码也可以在不包装在函数文字中的情况下工作。范例-
alert('Hi there')
有什么不同?为什么警报有效,但事件分配语句却无效?

最佳答案

这不是必需的。

您将代码放入DOM准备就绪时调用的事件处理程序中。

如果您不将代码放入DOM就绪处理程序中,并且代码执行DOM选择,则需要找到其他方法来确保DOM在运行之前已准备就绪。

如果您的代码不执行DOM选择,则不需要它。这就是您的alert()起作用的原因,因为它不需要获取任何元素。

替代方法是这样。

<body>
   <button id="testbutton">click</button>
   <div id="result"></div>

   <script type="text/javascript" src="/your/script.js"></script>
</body>

这会将您的代码置于页面上所有元素的下方,因此在您的代码运行时,它们肯定可用。

另一种选择是使用window.onload处理程序。
window.onload = function() {
    // your code
};

或使用jQuery。
$(window).on("load", function() {
    // your code
});

这类似于DOM ready处理程序,除了它等待所有资源(如图像)被加载。

09-09 22:03
查看更多