Javascript stopImmediatePropagation()是否应该停止从单个操作派生的后续事件?
单击某个元素以使其具有焦点时,焦点事件,然后单击事件,激发。我应该能够停止focus事件中的传播,并停止click处理程序的运行。对吧? 但是,没有停止即时版权、防止违约、停止版权或返回虚假信息;停止单击处理程序的触发 简化代码:Javascript stopImmediatePropagation()是否应该停止从单个操作派生的后续事件?,javascript,jquery,Javascript,Jquery,单击某个元素以使其具有焦点时,焦点事件,然后单击事件,激发。我应该能够停止focus事件中的传播,并停止click处理程序的运行。对吧? 但是,没有停止即时版权、防止违约、停止版权或返回虚假信息;停止单击处理程序的触发 简化代码: eComponentFocus = function(e,eventThis){ e.stopImmediatePropagation(); console.log(e.isImmediatePropagationStopped()); // tru
eComponentFocus = function(e,eventThis){
e.stopImmediatePropagation();
console.log(e.isImmediatePropagationStopped()); // true
console.log('focus');
return false;
}
eComponentClick = function(e,eventThis){
console.log('eComponentClick');
}
var base=this;
$Component.on('focus',function(e){base.eComponentFocus(e,this);});
$Component.on('click',function(e){base.eComponentClick(e,this);});
控制台,当单击$Component(一个div)时:
true
focus
eComponentClick
stopImmediatePropagation是否应该停止从单个用户操作派生的后续事件
更新:
这是问题的症结所在。单击div将触发焦点,然后单击,即使焦点事件试图阻止传播 你确定你看到的效果不是因为mousedown或mouseup事件吗?我添加了console.log'eventname';对于所有事件处理程序-当我单击元素时,仅触发焦点和单击事件。您是在触摸设备中还是在常规浏览器中?如果是普通浏览器,在点击事件发生之前,应该会触发mousedown和mouseupevent。我添加了一个问题。它的FF24在桌面上。我没有在此元素上注册mousedown或mouseup的任何处理程序。我不是100%确定,但我认为stopImmediatePropagation只会停止由相同用户操作导致的相同事件类型的进一步事件。如果您添加第二个焦点处理程序,它将被第一个焦点处理程序取消。