Javascript 单击控制按钮后,单击“文档”按钮将引发火灾
我在jquery中创建了一个常见的click函数,每次单击文档上的任何位置时都会触发该函数。若控件有click事件,那个么该事件将首先激发,文档click将在之后激发,但我想在控件click事件之前激发文档click事件。请建议如何解决此问题。为您提供两个选项:Javascript 单击控制按钮后,单击“文档”按钮将引发火灾,javascript,jquery,Javascript,Jquery,我在jquery中创建了一个常见的click函数,每次单击文档上的任何位置时都会触发该函数。若控件有click事件,那个么该事件将首先激发,文档click将在之后激发,但我想在控件click事件之前激发文档click事件。请建议如何解决此问题。为您提供两个选项: 在现代浏览器上,可以通过使用事件的捕获阶段而不是冒泡阶段来实现这一点。此图有助于了解事件的各个阶段: IE不支持事件捕获,直到IE9处于标准模式(IE8和更早版本根本没有) jQuery没有提供用于使用事件捕获的API,因此您必须使用
addEventListener
:
document.querySelector("selector for the control").addEventListener("click", function(e) {
// Control code here
}, true);
document.addEventListener("click", function(e) {
// Document code here
}, true);
最后的true
表示您希望使用捕获阶段,而不是冒泡阶段$(document).on("click", handleDocumentClick);
function handleDocumentClick(e) {
// On the next line, use whatever selector matches your controls
var input = $(e.target).closest("input")[0];
display("document click received");
if (input) {
handleControlClick.call(input, e);
}
}
function handleControlClick(e) {
display("control click received");
}
live()
live()
将单击事件绑定到DOM的文档元素。当浏览器事件在DOM树中冒泡时,任何匹配元素都会触发click事件
$(document).click(function() {
alert('document');
});
$(document).live('click', 'div', function() {
alert('div');
});
当然,除了三年前(v1.7版)弃用了
live
,一年半前(v1.9版)删除了它,而替换的on
没有相同的行为(顺序不同)。的“严格使用”是什么意思代码>??@T.J.Crowder感谢您的回复。我已经完成了所有的应用程序,我只想应用一些功能,它不可能改变所有的点击事件,所以请建议我更好的方法。事先谢谢。@supret:我想没有了。如果您说出了您试图应用的内容,我们可能可以,但是如果您已经以正常方式连接了所有事件处理程序,那么在元素级单击事件之前,没有快速简便的方法可以获得文档级单击事件。@T.J.Crowder谢谢:)@EhsanSajjad:“使用严格”
告诉启用ES5的JavaScript引擎启用JavaScript的严格变体(“严格模式”)。严格模式是一件好事(tm)。一方面,它保护你不受伤害。