Javascript 奇怪的jquery事件冒泡
我不确定这是否真的是一个冒泡事件Javascript 奇怪的jquery事件冒泡,javascript,jquery,Javascript,Jquery,我不确定这是否真的是一个冒泡事件event.stopPropagation()无法解决此问题。情况是: 单击元素类“clickMe”(根据需要单击任意数量) 然后单击li元素。单击事件将根据单击“clickMe”类的次数执行 下面是代码片段: html: 提前感谢您对此问题的帮助或解释。每当“clikMe”元素之一上发生“click”时,您将向元素添加另一个单击处理程序。jQuery代码维护所有这些处理程序,因此在您单击“clickMe”几次之后,会有几个处理程序,它们都会被调用 .live()
event.stopPropagation()
无法解决此问题。情况是:
li
元素。单击事件将根据单击“clickMe”类的次数执行
元素添加另一个单击处理程序。jQuery代码维护所有这些处理程序,因此在您单击“clickMe”几次之后,会有几个处理程序,它们都会被调用
.live()
方法不是委派事件处理的最佳方式。如果您使用的是新版本的jQuery,请使用.on()
,或者至少使用.delegate()
每当在其中一个“clikMe”
元素上发生“click”时,您将向
元素添加另一个单击处理程序。jQuery代码维护所有这些处理程序,因此在您单击“clickMe”几次之后,会有几个处理程序,它们都会被调用
.live()
方法不是委派事件处理的最佳方式。如果您使用的是新版本的jQuery,请使用.on()
,或者至少使用.delegate()
每次单击clickMe
都要将事件附加到您的li元素#test
为现在和将来与选择器匹配的所有元素附加事件处理程序
两者分开使用
每次单击
clickMe
都会将一个事件附加到#test
,这是您的li元素
为现在和将来与选择器匹配的所有元素附加事件处理程序
两者分开使用
小提琴:
jQuery:
$(function() {
var clickme_clicks = 0, clickme_timeout = setTimeout(function(){},0) ;
$('.clickMe').on('click', function(e){
clickme_clicks++;
clearTimeout( clickme_timeout );
clickme_timeout = setTimeout(function(){ clickme_clicks = 0; },1000);
});
$('li a', $('#test')).on('click',function(e){
e.preventDefault();
//if(clickme_clicks == 0) return;
alert('clicks: ' + clickme_clicks );
})
});
小提琴:
jQuery:
$(function() {
var clickme_clicks = 0, clickme_timeout = setTimeout(function(){},0) ;
$('.clickMe').on('click', function(e){
clickme_clicks++;
clearTimeout( clickme_timeout );
clickme_timeout = setTimeout(function(){ clickme_clicks = 0; },1000);
});
$('li a', $('#test')).on('click',function(e){
e.preventDefault();
//if(clickme_clicks == 0) return;
alert('clicks: ' + clickme_clicks );
})
});
“将根据点击次数执行”是什么意思?你在哪里计算他们?你打算发生什么?为什么首先要在
clickMe
事件处理程序中附加一个click事件处理程序?“将根据单击次数执行”不是我想要实现的。这是我试图解决的问题。啊,那是因为你每次点击都会添加一个处理程序。点击我。因此,当您单击li按钮时,每个处理程序都会执行。这就是为什么会出现多个警报。我实际上是在玩弄代码。这个想法是,只要在“clickMe”上单击鼠标右键,就会触发对li的任何单击。这段代码只是一个例子。你说“将根据点击次数执行”是什么意思?你在哪里计算他们?你打算发生什么?为什么首先要在clickMe
事件处理程序中附加一个click事件处理程序?“将根据单击次数执行”不是我想要实现的。这是我试图解决的问题。啊,那是因为你每次点击都会添加一个处理程序。点击我。因此,当您单击li按钮时,每个处理程序都会执行。这就是为什么会出现多个警报。我实际上是在玩弄代码。这个想法是,只要在“clickMe”上单击鼠标右键,就会触发对li的任何单击。这个片段只是一个例子,我认为这不是他想要的。“点击事件将根据“clickMe”类的点击次数执行。”这是已经发生的事情,他问为什么。@gl3nn我会让OP澄清他的需求。我做了他想做的事。他已经在对他的问题的评论中澄清了自己,我也很困惑。谢谢你的代码。但是就像我之前说的,我真的不需要知道点击次数。是的,通过分离事件侦听器来解决问题(就像你和其他建议解决方案的人一样),我仍然不知道你想做什么,但我很高兴它帮助你做到了这一点。我认为这不是他想要的。“点击事件将根据“clickMe”类的点击次数执行。”这是已经发生的事情,他问为什么。@gl3nn我会让OP澄清他的需求。我做了他想做的事。他已经在对他的问题的评论中澄清了自己,我也很困惑。谢谢你的代码。但是就像我之前说的,我真的不需要知道点击次数。是的,通过分离事件侦听器来解决问题(就像你和其他建议解决方案的人一样),我仍然不知道你想做什么,但我很高兴它帮助你做到了这一点。
$('.clickMe').on('click', function(e) {
//e.stopPropagation()
})
$('li', $('#test')).on('click', function(e) {
//e.stopPropagation()
alert('ouch');
});
$(function() {
var clickme_clicks = 0, clickme_timeout = setTimeout(function(){},0) ;
$('.clickMe').on('click', function(e){
clickme_clicks++;
clearTimeout( clickme_timeout );
clickme_timeout = setTimeout(function(){ clickme_clicks = 0; },1000);
});
$('li a', $('#test')).on('click',function(e){
e.preventDefault();
//if(clickme_clicks == 0) return;
alert('clicks: ' + clickme_clicks );
})
});