2011-09-09 14 views
3

Chrome/Firefoxでは、カスタムのプロパティを1つのハンドラ内のイベントオブジェクトにアタッチし、イベントハンドリングがバブリングされても同じイベントに対して別のハンドラで読み込むことができます。Javascriptでバブリングされたイベントオブジェクトにプロパティをアタッチする

私はIEで同じことをすることはできません。イベントがバブリングされている間、私のカスタムプロパティは失われます。 解決策または回避策があるかどうか知っていますか?

次はその問題の一例です:

<div id="div1"> 
<input type="button" value="Foo" id="button1"> 
</div> 

<script> 

function attach(el, event, fn) { 
    if (el.addEventListener) { 
    el.addEventListener(event, fn); 
    } else if (el.attachEvent) { 
    el.attachEvent('on'+event, fn); 
    } 

} 

attach(document.getElementById("button1"), 'click', function (event) { 
event.abc = "done"; 
return true; 
}); 

attach(document.getElementById("div1"), 'click', function (event) { 
alert(event.abc); 
return true; 
}); 

</script> 
+1

IEの 'event'オブジェクトにアクセスすることさえありません。 IEはそれをイベントハンドラに渡さず、 'window.event'を介してのみ利用可能です。まずこれを試してみてください。 –

+0

@Felix私はwindow.eventを試みたが役に立たなかった。私はかなりイベントオブジェクトがイベントハンドラに渡されることを確信しています。 – mgamer

+1

IE9以前のIEではありません。 –

答えて

0

あなたはがIEのイベントオブジェクトにプロパティを追加することはできません私のテスト(IE8がテスト)でよります。

attach(document.getElementById("button1"), 'click', function (ev) { 
    //ev=ev||event; 
    //ev.abc = "done"; 
    // next lines show you why you cannot save properties in event object 
    var xx1=event; 
    var xx2=event; 
    alert(xx1===xx2); // // showed *false* in IE8, but expected *true* 

    return true; 
}); 

私はわからないが、eventオブジェクトが要求されたとき、多分、IE8は常に新しいオブジェクトを返す、以前の要求と同じプロパティ/値が含まれています

は、次のコードを試してみてください。

関連する問題