javascript - 停止传播和开始传播

标签 javascript jquery stoppropagation

我想制作一个额外的点击处理程序(客户端页面,不能修改他的 js/html),它在我的脚本中应该像这样工作:

1) event.stopPropagation(暂停客户端点击传播)
2)我的功能(做我的功能,当一切都完成后做下一步)
3) event.startPropagation(继续标准客户端操作)

现在,第一个和第二个工作。第三个是问题。
我知道 event.startPropagation 不存在,但我想要类似的东西。 有什么提示吗?

最佳答案

您可以在父节点 f.ex (jQuery) 上重新触发相同的事件对象。您需要先复制事件对象并将其传递到触发器中,以便在气泡中捕获相同的事件属性 (f.ex e.pageX):

var copy = $.extend(true, {}, e);
setTimeout(function() {
    $(copy.target.parentNode).trigger(copy);
},500);
e.stopPropagation();

演示:http://jsfiddle.net/GKkth/

编辑

根据您的评论,我认为您正在寻找类似的东西:

$.fn.bindFirst = function(type, handler) {
    return this.each(function() {
        var elm = this;
        var evs = $._data(this).events;
        if ( type in evs ) {
            var handlers = evs[type].map(function(ev) {
                return ev.handler;
            });
            $(elm).unbind(type).on(type, function(e) {
                handler.call(elm, e, function() {
                    handlers.forEach(function(fn) {
                        fn.call(elm);
                    });
                });
            });
        }
    });
};

此原型(prototype)允许您绑定(bind)一个“高级处理程序”,该处理程序包含一个 next 函数,该函数将在您需要时对同一元素执行所有先前的处理程序。 像这样使用:

$('button').click(function() {
    console.log('first');
}).click(function() {
    console.log('second');
}).bindFirst('click', function(e, next) {
    console.log('do something first');
    setTimeout(next, 1000); // holds the other handlers for 1sec
});

演示:http://jsfiddle.net/BGuU3/1/

关于javascript - 停止传播和开始传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695567/

相关文章:

javascript - 从数组中删除最后一个元素(从字符串中删除最后一行)

IE6/7 的 JavaScript 调试

javascript - 在 WooCommerce 的 jQuery 日期选择器问题中禁用工作日和假期

javascript - 基于屏幕尺寸可见的图库图像

javascript - IE/Firefox 气泡事件

javascript - react : update a field value based on another field in dynamically generated form

jquery 提交 onclick

javascript - jQuery 中的滚动条出现/消失事件?

javascript - 停止传播事件监听器单击,但仍允许元素内发生其他单击事件

javascript - event.preventDefault 与 event.stopPropagation