2

假设我在同一个文档中有一些带有一些代码的 div:

<div id="trigger">Click Me!</div>
<div id="handler">Handler</div>

<script type="text/javascript">
    $("#handler").on('check', function() {alert('Handler is working!');})
    $("#trigger").on('click', function()
       {$("#handler").trigger('check');alert('Trigger is working!')
    })
</script>

它按预期工作。

但是,如果我使用.load()所有这些注入到页面中,那么只有(本机)触发事件,而不是(自定义)处理程序事件正在工作。

我想这与时间有关,但我认为.on()应该处理时间问题?

编辑:解决方案


我全都错了。我不知道与上述同时加载的文档有自己对 Jquery 源的引用。因此,在 DOM 中已经存在的 Jquery 之上加载了不同版本的 Jquery。现在它可以在没有.ready()甚至使用原始语法的情况下工作。谢谢!

4

2 回答 2

2

您要做的是在元素#handler存在之前访问它(.load 需要一些时间才能将其拉入页面)。

相反,.on 还支持侦听尚不存在的元素的能力。

$("body").on("click", "#handler", function() { alert("Clicked on #handler"); });

这将在 body 元素(应该存在)上侦听 ID 为 #handler 的元素的任何点击,即使它后来被注入。

于 2013-01-27T16:02:48.273 回答
1

因为您需要指定父选择器以考虑动态创建的元素。

例子:

$("body").on('check', '#handler', function() {alert('Handler is working!');})

这是一个很好的相关问题:jQuery 1.7 on() and off() methods for dynamic elements

于 2013-01-27T16:03:40.583 回答