我想制作一个额外的点击处理程序(客户端页面,不能修改他的 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();
编辑
根据您的评论,我认为您正在寻找类似的东西:
$.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
});
关于javascript - 停止传播和开始传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695567/