0

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

$('.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!
});
4

3 回答 3

1

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

您应该stopPropagation从被单击元素的更本地的祖先。

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


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

于 2012-05-08T18:22:04.210 回答
0

你试过了吗:

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

或者

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

注意: e.stopPropagation(); 对直播活动无效

根据你的问题,我有一个下拉菜单,其中包含一个输入和几个按钮。下拉菜单应该隐藏...意味着下拉菜单已经存在于您的 DOM 中。如果它已经存在,那么您不需要现场活动。

于 2012-05-08T18:22:35.443 回答
0

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

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

注意:正确注意 event.target 应该有助于使用 .on() 重叠“点击”定义;

于 2012-05-08T18:24:14.117 回答