我有一个事件,我们只需将其称为点击事件,只要点击某个元素.clickable
就会触发该事件。可以在文档中的任何位置多次找到此元素,并使用绑定到文档的.on('click')
进行侦听,如下所示:
$(document).on("click", ".clickable", function(){
alert("element clicked");
});
为了这个问题,让我们假设我无法改变这一点,点击监听器必须绑定到具有.clickable元素范围的文档级别。
现在,有时此页面会将这些可点击元素中的一个嵌套在我们需要此点击事件的区域内,以不执行默认警报操作,而是执行其他操作。由于这段代码必须在前一个侦听器之后,作用于文档级别,因此event.preventDefault()
或event.stopPropogation()
等预防性函数不会停止默认操作,因为此代码会在另一个之后触发。 / p>
我虽然可以做类似的事情:
$(document).off("click", ".nonDefaultActionArea .clickable");
$(document).on("click", ".nonDefaultActionArea .clickable", function(){
alert("alternative action taken");
});
我将取消绑定来自该区域的任何点击以停止默认操作并将其重新绑定到新操作。但是,这不起作用,因为第一个单击侦听器未绑定到.nonDefaultActionArea .clickable
,它绑定到document
。
所以我问:无论如何,有了规定我无法改变第一个听众,而且我引入的任何代码都必须在第一个听众之后;我可以阻止第一个动作并触发替代动作。
JsFiddle描述问题:https://jsfiddle.net/y7kumqh2/