在document.ready使用DOM完全加载后执行代码.这可以用于将事件处理程序附加到页面上的元素,例如
$(function(){
$('#somediv').click(function(){
});
})
<div id="somediv"> </div>
Run Code Online (Sandbox Code Playgroud)
在内部,jQuery挂钩DOMContentLoaded并window.onload作为后备.在IE的情况下,尝试一遍又一遍地滚动视口直到成功.
我有几个问题,我的第一个问题是,当将事件处理程序绑定到document自身时,是否有必要将该代码放入document.ready?我一直在编写下面的代码,而不是将它包装在一个document.ready
$(document).keydown(function(e){
if (e.which == 39) {
alert( "right arrow pressed" );
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它有效.我的理解是,由于此代码不会连接到文档中的任何元素,而是文档本身,因此无需将其包装在document.ready处理程序中.我不包装它的另一个原因是因为我曾经在vanilla javascript中做同样的事情,相当于下面的代码,这也有效.
document.onkeydown = function(){
var keyCode = event.keyCode || event.which;
if (keyCode == 39) {
alert( "right arrow pressed" );
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看过很多人将它包装成一个帖子document.ready,有没有不包装这些代码的缺点document.ready?
此外,我认为这个问题源于我在构建DOM时发生的事情缺乏清晰度,所以如果有人能够解释在DOM准备好之前的那段时间发生的事情.对于我来说,当html被解析并转换为DOM树时,文档已准备就绪,还是有更多内容?
总之,这是我的问题
我有一个Jquery Mobile shell页面,我正在使用Ajax加载表单.表单有一些复选框,我需要绑定到它.
奇怪的是,我可以让它直接在按钮上设置监听器,如下所示:
$('input[name="ohneiln"]').on('change', function() {
alert("hello");
});
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将侦听器设置为$(document)并委托给checkbox侦听器时,侦听器永远不会触发:
$(document).on('change', 'input[name="ohneiln"]', function() {
alert("hello");
});
Run Code Online (Sandbox Code Playgroud)
问题:
为通过Ajax加载的"动态"元素设置事件绑定的正确方法是什么$(document).on()?这对change事件不可能或为什么我遇到麻烦?
感谢帮助!