我想做一个额外的点击处理程序(客户端页面,不能修改他的js/html),在我的脚本中应该是这样工作的:
1) event.stopPropagation (暂停客户端点击传播)
2)我的函数(do my function,当一切都完成后,do next)
3) event.startPropagation (继续标准客户端操作)
现在,第一个和第二个工作。第三个是问题。
我知道event.startPropagation并不存在,但我想要这样的东西。有什么提示吗?
发布于 2013-07-17 17:26:31
您可以在父节点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);
});
});
});
}
});
};这个原型允许您绑定一个“高级处理程序”,该“高级处理程序”包含一个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/
发布于 2013-07-17 17:10:24
不要一开始就停止传播。
测试my function是否做了您想让它做的事情,然后决定是否要停止传播。
发布于 2013-07-17 17:12:47
如果要分别启用/禁用单击事件,请添加和移除单击处理程序。因为event.stopPropagation()将阻止事件沿dom树向上传播。
更新:
如果您使用的是jQuery,请使用.trigger()函数。
http://api.jquery.com/trigger/
https://stackoverflow.com/questions/17695567
复制相似问题