0

我收到 jQuery 事件处理程序的意外行为。这与这个问题中讨论的问题非常相似:为什么我的 jQuery 事件处理程序在附加到多个元素时失败?.

基本上,一个简化的例子是,我的页面调用

   $(document).ready(function(){
        $('a.submit').click(function(e){
              e.preventDefault();
              alert(this.href);
        });
   });

假设标记是:

<html>
    <body>
        <a href="url1" class="submit">text1</a>
        <a href="url2" class="submit">text2</a>
        <a href="url3" class="submit">text3</a>
    </body>
</html>

除了最后一个之外,所有与提交类的链接都会引发事件。页面上的最后一个链接.submit没有连接到事件处理程序。click(fn)live('click',fn)作品 代替。

我的问题是我不明白为什么原始处理程序会失败。所有链接同时呈现,我将处理程序订阅包装在 a$(document).ready()中,这应该确保加载 DOM。

我需要弄清楚这一点,因为我有一个更复杂的情况,处理程序在一个缩小的 javascript 文件中注册,所以如果我能理解如何防止这个错误而不是在它发生时修复它,那将非常有帮助。

还要注意的一件事是,我在 Firefox、Chrome 和 IE 中收到了同样的奇怪行为。我正在使用 jQuery1.5.1

4

1 回答 1

0

考虑到您提供的 html:

<a href="url1" class="submit">text1</a>
<a href="url2" class="submit">text2</a>
<a href="url3" class="submit">text3</a>

和 JavaScript:

$(document).ready(function(){
        $('a.submit').click(function(e){
              e.preventDefault();
              alert(this.href);
        });
   });

它必须工作。毫无疑问。但是,如果您的锚标记<a>是动态创建的,则无法将直接点击事件绑定到那些,而是通过实时诸如

$('a.submit').on('click', function(e){
    //magic here
});
于 2011-04-17T18:01:25.067 回答