劫持onchange事件而不干扰原始function

我正在写一个图书馆我希望包含在可能已经使用onchange事件的不同页面上 – 有没有办法将我的事件附加到onchange而不删除原始事件?

编辑:

在窗口obj上的onchange。 不仅是一个单独的元素 – 在URL中的哈希变化中的onchange等等。抱歉,如果我混淆了它们!

如果我是正确的,听起来你想要将新代码注入现有事件中。 如果你想要一个纯粹的JavaScript解决方案,这可能对你有所帮助,这里有一个演示该function的小提琴。 http://jsfiddle.net/VZCve/1/

var element = document.getElementById("myElementId"); element.onchange = (function (onchange) { return function(evt) { // reference to event to pass argument properly evt = evt || event; // if an existing event already existed then execute it. if (onchange) { onchange(evt); } // new code "injection" alert("hello2"); } })(element.onchange); 

编辑:现在标签已更改,您在问题中引用了jQuery

jQuery将继续使用jQuery.change()绑定新函数。

请注意以下内容将执行分配的所有更改function

 $(document).ready(function () { $("#myElement").change(function() { alert('executed') }); $("#myElement").change(function() { alert('executed again') }); $("#myElement").change(function() { alert('executed again again') }); }); 

当您在选择器中触发元素的更改事件时,您将收到3个警报。

请注意,事件触发的顺序取决于每个函数绑定到元素的顺序。

这是一个简单的小提琴演示jQuery中的functionhttp://jsfiddle.net/VZCve/

使用jQuery的.change()函数来分配onchange处理程序不会覆盖现有的onchange事件(或其他jQuery分配的处理程序)。 在这里查看工作演示: http : //jsfiddle.net/nrabinowitz/EyKdm/

较新的浏览器有一个addEventListener可以做到,但dean.edwards解决方案更好

与旧版浏览器更兼容

你也可以使用一个costem eventhandeler(s)whitch调用数组的函数(正确完成你可以处理子函数的return值来决定你是否要运行下一个函数,还可以用于event couts

 if(typeof element.onclickfunctions == "undefined"){ element.onclickfunctions = []; } element.onclickfunctions.push( function(event){return Myfunct(event);});//or var element.onclick = function(event){ for(x in element.onclickfuncitons){ if(! x(event)){ break; } } }; 

代码未测试请在downvote之前发表评论