2011-10-12 63 views
2

即時通訊編寫我想包括在不同的網頁誰可能已經使用onchange事件 - 有沒有辦法將我的事件附加到onchange而不刪除原來的?劫持onchange事件,而不會干擾原有的功能

編輯:

onchange窗口obj。不僅僅是一個單一的元素 - onchange在網址中的哈希變化等。抱歉,如果我混淆了他們!

回答

7

如果我是正確的,聽起來像是要將新代碼注入現有事件。如果你想要一個純粹的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/

0

較新的瀏覽器都有一個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

前請評論