Jquery:停止传播?
我已经添加了stopPropagation,但是,我仍然连续出现两个弹出窗口。这比以前好多了,一个点击的元素有20个弹出窗口……是有更好的方法还是我遗漏了什么Jquery:停止传播?,jquery,Jquery,我已经添加了stopPropagation,但是,我仍然连续出现两个弹出窗口。这比以前好多了,一个点击的元素有20个弹出窗口……是有更好的方法还是我遗漏了什么 $(top.document).ready(function () { $("*").click(processAction); }); function processAction(e) { var clicked = e.target; e.stopPropagation(); alert(cli
$(top.document).ready(function () {
$("*").click(processAction);
});
function processAction(e) {
var clicked = e.target;
e.stopPropagation();
alert(clicked.tagName);
e.stopPropagation();
switch (clicked) {
case "A":
//execute code block 1
break;
case "INPUT":
//execute code block 2
break;
default:
//code to be executed if n is different from case 1 and 2
}
};
使用
相反 我的小建议:用
a
或input
替换*
。现在您的代码将更简单,您可以删除开关。(我在switch中看到您检查单击了哪些元素)。我要说的是,绝对不要在每个元素上放置单击处理程序。正如@Rin所述,您可以通过标记或其他选择器来分配它们
如果您真的希望以这种方式处理页面上的所有单击,我建议您在文档上放置一个处理程序,并让单击事件冒泡到该位置
这样做效率更高,无需执行e.stopPropagation()
示例:
您真的打算为每个元素停止树上的每个默认操作吗?您的stopPropagation调用不应该放在case块中,而不是放在它们前面,这样只有您显式处理的元素才能停止传播吗?jQuery。每个()只接受一个参数,那么映射
参数是什么?如果您使用.each()
,您将得到与问题中的代码相同的结果。听起来像是将$与$(…).each()混为一谈。
$('*').each(map, function(key, value) {
$(this).click(processAction);
});
$(top.document).ready(function () {
// All clicks on the page will bubble up to the document
// and fire the handler.
$(document).click(processAction);
});
function processAction(e) {
var clicked = e.target;
alert(clicked.tagName);
switch (clicked.tagName) {
case "A":
//execute code block 1
break;
case "INPUT":
//execute code block 2
break;
default:
//code to be executed if n is different from case 1 and 2
}
};