2012-05-23 112 views
0
$().ready(function(){ 
    $("#move-to").click(function(){ 
     $("body").bind("click",function(){ 
      alert("foo"); 
     }); 
    }); 
}); 

为什么我看到警告(“foo”)后立即点击“移动”?
当我在文档evrithing中的某个div上绑定“alert”时没问题。
可以来somebady帮助?
我在做什么错?JQuery函数绑定点击事件的身体节点与另一个点击事件立即执行

+2

因为'#移动到'点击被传播到'body'元素。这在JS中称为事件传播。 –

+1

你真的不应该在点击事件中绑定点击事件(除非你的用例是我猜的边框) –

+1

@KevinB:这对于弹出式菜单可能很有用。 – SLaks

回答

3

当您的#move-to处理程序运行后,点击事件会冒泡到<body>,触发您刚绑定的处理程序。

您可以通过致电e.stopPropagation()来防止这种情况。

或者,您也可以通过移动bind()setTimeout调用此事件周期后<body> click事件绑定。

0
$().ready(function(){ 
    $("#move-to").click(function(e){ 
     e.stopPropagation(); 
     $("body").bind("click",function(){ 
     alert("foo"); 
     });  
    }); 
}); 

但我认为你编写一遍又一遍,当你点击#move-to绑定click事件,这如果没有解绑click事件在其他地方是不好的。

+0

当然可以。功能将会解除绑定。这只是函数的简单变体。 –