Jquery:停止传播?

Jquery:停止传播?,jquery,Jquery,我已经添加了stopPropagation,但是,我仍然连续出现两个弹出窗口。这比以前好多了,一个点击的元素有20个弹出窗口……是有更好的方法还是我遗漏了什么 $(top.document).ready(function () { $("*").click(processAction); }); function processAction(e) { var clicked = e.target; e.stopPropagation(); alert(cli

我已经添加了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
    }
};
使用


相反

我的小建议:用
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
    }
};