劫持onchange事件,而不会干扰原有的功能

问题描述:

即时通讯编写我想包括在不同的网页谁可能已经使用onchange事件 - 有没有办法将我的事件附加到onchange而不删除原来的?劫持onchange事件,而不会干扰原有的功能

编辑:

onchange窗口obj。不仅仅是一个单一的元素 - onchange在网址中的哈希变化等。抱歉,如果我混淆了他们!

如果我是正确的,听起来像是要将新代码注入现有事件。如果你想要一个纯粹的JavaScript解决方案,这可能会对你有所帮助,这里有一个演示该功能的小提示。 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().

注意以下将执行所有更改绑定的新功能分配的功能

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

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

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

下面是一个简单的小提琴表明在jQuery的功能http://jsfiddle.net/VZCve/

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

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

与旧的浏览器更兼容

你可以也可以使用一个叫做数组的函数的事件函数(或多个函数)(正确地完成,您可以处理子函数的return值,以决定是否要运行下一个函数,也可以使用cout S代表event

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

前请评论