我添加了stopPropagation,但是,我仍然连续获得两个弹出窗口。这比以前更好,其中有一个元素被点击了20个弹出窗口....有更好的方法还是我错过了什么?
$(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
}
};
答案 0 :(得分:3)
我要说绝对不要在每个元素上放置一个点击处理程序。正如@Rin所述,您可以通过标签或其他选择器来分配它们。
如果确实希望以这种方式处理页面上的所有点击,我建议您在document
上放置一个处理程序,然后让点击事件会冒泡到那个。
效率更高,无需e.stopPropagation()
。
示例: http://jsfiddle.net/y6hry/
$(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
}
};
答案 1 :(得分:0)
使用
$('*').each(map, function(key, value) {
$(this).click(processAction);
});
代替;
答案 2 :(得分:0)
我的小建议:将*
替换为a
或input
。现在你的代码会更简单,你可以删除开关。 (我在开关中看到你检查点击了什么元素。)