0

我有许多 jquery 函数,它们在使用标准 $(function(){ 包装时执行两次。如下所示的其中一个函数将在展开后执行一次,并将在包装器周围执行两次。

我有一个 ajax 调用,我也做了一些调整。当你包装它时,它会调用一次新版本和一次旧版本。Unwrapped 只是调用旧版本。由于函数嵌入在 div 中,我看到了一个关于双重执行的错误。这可能吗?

处理 jsfiddle 演示。很快就会搞定的。

$(".words").click(function(event) {
    event.preventDefault();
    $("#hideme:first").attr('id', '').insertAfter($('#9999'));  
}); 

更新:当我在第三方代码中发现错误的事件处理程序时,我能够修复一些调用。然而,一个仍然存在。我已更改 id 以确保没有冲突。似乎某处还有另一个错误的事件处理程序。firebug 有什么方法可以找到锚点的事件处理程序?

4

2 回答 2

1

我整理了一个导致同样问题的jsfiddle。在我的示例中,我放置了两个 div,它们都具有“test”类,并将一个嵌套在另一个中。点击外部调用一次函数,内部调用两次。我的猜测是同样的事情正在发生在你身上。

http://jsfiddle.net/jcolicchio/HXVcm/

编辑:这似乎解决了它:

$(document).ready(function(){
    $('.test').click(function(e){
        alert("HI!");
        e.stopPropagation();
    });
});​

似乎添加 e.stopPropagation 是您正在寻找的,而不是 preventDefault,它适用于链接和提交按钮

于 2012-11-27T03:50:30.130 回答
0

用于event.stopPropagation();停止执行函数两次。

$(".words").click(function(event) {
    event.preventDefault();
    event.stopPropagation();
    $("#hideme:first").attr('id', '').insertAfter($('#9999'));   
});

event.stopPropagation();将阻止事件在 DOM 树中冒泡,阻止任何父处理程序收到事件通知。

http://api.jquery.com/event.stopPropagation/

于 2012-11-27T03:54:15.033 回答