出于某种原因,我在数字输入上有一个额外的更改处理程序。我一生都无法弄清楚它是从哪里来的。谁能指出我如何追踪这个 rouge 事件处理程序分配的方向?在 chrome 开发工具中,如果我检查元素并查看事件处理程序区域,它只指向 (1) jquery 和 (2) 未定义。
3 回答
jquery绑定的所有事件都在$( target ).data( 'events' )
;这表示具有键的对象作为事件名称,包含函数数组。
例如,直接在 stackoverflow 上的控制台中尝试此操作
$('a').data('events').click[0].handler
:
要列出 jquery 对象分配的每个事件类型回调,请尝试:
$.each( $( youSelector ).data('events'), function(v,k){
console.log( v +":");
$(this).each( function(){
console.log( this.handler );
});
console.log("------------------");
});
找出它们来自哪个文件的方法是从控制台中的处理程序代码中搜索资源选项卡中的搜索输入:)
如果不需要其他处理程序,您可以随时使用unbind
:
$("#id").unbind('change').bind("change", handler);
当然,您必须考虑每种可能的情况,因此完整的解决方案将是:
$("#id")
.off('change')
.die('change')
.unbind('change')
.on("change", handler);
These answers weren't quite what I was looking for but I was able to find out where the handlers were coming from. I'm using webshims and a jquery tool called overlay. Apparently the overlay executes the code in the script tag when the page is rendered and again when the overlay is actually applied.