jquery live click event stopPropagation

时间:2012-05-08 18:17:22

标签: event-handling live jquery stoppropagation

我有一个下拉菜单,其中包含一个输入和几个按钮。当我单击其中一个按钮或其他某个按钮时,下拉列表应隐藏,但在按键输入时不要隐藏。我使用以下代码,它不起作用。虽然它在我使用

时有用
$('.dropdown input').click(function(e){

})

而不是live

但我确实需要live,那么有什么解决办法吗?

/*  dropdown menu   */
$('.dropdown input').live('click', function(e) {
    e.stopPropagation();
});

$(document).click(function(e){
    if(e.isPropagationStopped()) return;  //important, check for it!
});

3 个答案:

答案 0 :(得分:1)

e.stopPropagation().live()中对你没有好处,因为处理程序绑定到document,所以在调用处理程序时,事件已经冒泡了。 / p>

你应该从被点击的元素的更本地的祖先stopPropagation

由于您使用.live(),我假设有一些动态元素正在创建。如果是这样,要绑定的正确元素将取决于您的其余代码。


旁注,但你从不“需要”.live()。还有其他方法可以处理动态创建的元素。

答案 1 :(得分:0)

你试过了吗?

$('.dropdown').on('click', 'input', function(e) {
    e.stopPropagation();
});

OR

$('.dropdown').delegate('input', 'click', function(e) {
    e.stopPropagation();
});

注意: e.stopPropagation(); is not effective for live event

根据你的问题 我有一个下拉菜单,其中包含一个输入和几个按钮。下拉列表应隐藏... 表示您的DOM中已存在下拉列表。如果它已经存在,那么您不需要直播活动。

答案 2 :(得分:0)

你使用的是什么版本的jQuery? > 1.7然后:

$(document).on({"click":function(e){
  //do your work, only input clicks will fire this
}},".dropdown input",null);

注释: 正确地关注event.target应该使用.on();

帮助重叠'click'定义