Pio*_*cik 14 javascript jquery stoppropagation
我想制作一个额外的点击处理程序(客户端页面,不能修改他的js/html),它应该在我的脚本中这样工作:
1)event.stopPropagation(暂停客户点击传播)
2)我的功能(做我的功能,当一切都完成后做下一步)
3)event.startPropagation(继续标准客户端动作)
现在,第一个和第二个工作.第三是问题.
我知道event.startPropagation不存在,但我想要那样的东西.任何提示?
Dav*_*ing 11
您可以在父节点f.ex(jQuery)上重新触发相同的事件对象.您需要先复制事件对象并将其传递给触发器,以便在气泡(f.ex e.pageX)中捕获相同的事件属性:
var copy = $.extend(true, {}, e);
setTimeout(function() {
$(copy.target.parentNode).trigger(copy);
},500);
e.stopPropagation();
Run Code Online (Sandbox Code Playgroud)
编辑
根据您的评论,我认为您正在寻找以下内容:
$.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);
});
});
});
}
});
};
Run Code Online (Sandbox Code Playgroud)
这个原型允许你绑定一个"高级处理程序",它包含一个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
});
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/BGuU3/1/
首先不要停止传播。
测试它是否my function按照您希望的方式执行,然后决定是否要停止传播。
| 归档时间: |
|
| 查看次数: |
23416 次 |
| 最近记录: |