2012-03-05 6 views
15

オーバーライドされるイベントハンドラを克服するには?私は、スクリプトを持っている はwindow.onloadがオーバーライドされないようにするjavacript

window.onload = function() { 
    //Handler in a.js 
} 

別のスクリプトが言うa.js言うb.js

a.jsは私

をすることによって構築されたサードパーティのライブラリの一種である、
window.onload = function() { 
    //Handler in b.js 
} 

b.jsはスクリプトを使用しているパブリッシャーです[私はここで変更できません]

b.jsのonloadハンドラはa.jsのハンドラをオーバーライドしますか?

「はい」の場合、これを防ぐ方法を教えてください。

a.jsにすべてのイベントハンドラのキューを作成し、イベントヘルプでデキューしますか?

b.jsがロードされるまで、a.jsはイベントのすべてのイベントハンドラを知っていますか?

思考や参照がダウンレベルのIEのバージョンで

答えて

8

使用element.addEventListenerまたはwindow.attachEventに役立つだろう。

サンプルaddEvent方法:

function addEvent(node, type, listener) { 
    if (node.addEventListener) { 
     node.addEventListener(type, listener, false); 
     return true; 
    } else if (node.attachEvent) { 
     node['e' + type + listener] = listener; 
     node[type + listener] = function() { 
      node['e' + type + listener](window.event); 
     } 
     node.attachEvent('on' + type, node[type + listener]); 
     return true; 
    } 
    return false; 
}; 

- ほとんどすべてではないが、jQueryMooToolsなどの近代的なJavaScriptライブラリは、独自の実装を持っています。さまざまなブラウザの実装を抽象化し、完全にテストされているので、APIを活用することをおすすめします。

+0

ノード['e' + type + listener]が必要なのはなぜですか? node.attachEvent( 'on' + type、listener)は動作しませんか? – Tamil

16

[はい、二文は最初のものを上書きします、同じイベント

window.addEventListener("load", yourfunction, false); 
-1

のための様々なハンドラを持つようにaddEventListener()を使用する必要があります。従来の登録モデルを使用しているため、特定のイベントとオブジェクトに対して1つのイベントハンドルのみが許可されます。関数の代入は累積しません。 でも、次のことができます:

window.onload = function() {handlerinb(); handlerina()} 
関連する問題