0

ページ上の各 INPUT 要素をループするときに呼び出される JS のビットがあります。

if (thisField.addEventListener){ // good browsers
    thisField.addEventListener('focus', function(event){toggleHelpText(this,event)}, true);
    thisField.addEventListener('blur', function(event){toggleHelpText(this,event)}, false);
} else if (thisField.attachEvent){ // IE
    thisField.attachEvent('onfocus',function(event){toggleHelpText(thisField,event)});
    thisField.attachEvent('onblur',function(event){toggleHelpText(thisField,event)});
}   

優れたブラウザでは、本来の機能を果たします。各要素にフォーカスおよびぼかしイベント リスナーをアタッチし、トリガーされると、オブジェクトとそれをトリガーしたイベントを関数 'toggleHelpText' に渡します。

ただし、IEは機能しません。IE では、イベント リスナーがアタッチされているすべてのフィールドに、ループ内の最後のオブジェクトのみを参照するオブジェクト 'thisField' があります。

つまり、3 つの入力フィールドがある場合、適切なブラウザーは、field1、field2、および field3 をそれぞれ「this」として渡すフォーカス イベントを呼び出します。

IE では、フォーカス イベントをトリガーするときに、3 つのフィールドすべてが field3 をオブジェクトとして渡します。

解決策はありますか?

また、IE でエラーが発生するためだけに、次の構文オプションを試しました。

thisField.attachEvent('onblur',function(event){toggleHelpText(this,event)});
thisField.attachEvent('onblur',function(this,event){toggleHelpText(thisField,event)});
thisField.attachEvent('onblur',function(this,event){toggleHelpText(this,event)});
4

2 に答える 2

0

IE では、発生したイベントが引数としてイベント ハンドラーに提供されません。window.event で収集する必要があります。

于 2011-03-11T05:38:16.740 に答える
0

解決:

これは私の元のロジックでした:

for loop...
    attach events to each item passing object[i]

同じ obj が各イベント リスナー (配列内の最後のオブジェクト) に渡されていた IE を除いて、これは正常に機能しました。

修正はこれを行うことです:

for loop...
    call function to attach events passing object[i]

function
    attach events to each item passing object[i]

以前にこれに遭遇したことがあります...これは閉鎖の問題ですよね?

于 2011-03-11T17:02:36.890 に答える