我有一个下拉菜单,其中包含一个输入和几个按钮。当我单击其中一个按钮或其他某个按钮时,下拉列表应隐藏,但在按键输入时不要隐藏。我使用以下代码,它不起作用。虽然它在我使用
时有用$('.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!
});
答案 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'定义