Jquery:停止传播?

时间:2010-09-23 00:18:15

标签: jquery

我添加了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
    }
};

3 个答案:

答案 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)

我的小建议:将*替换为ainput。现在你的代码会更简单,你可以删除开关。 (我在开关中看到你检查点击了什么元素。)