我有以下有效的代码-
$(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处理程序,除了它等待所有资源(如图像)被加载。