2009-07-17 19 views
18
document.click = check; 

function check(e) 
{ 
    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') 
    { 
     if (e.target.id != 'show_calender') 
      obj.style.display='none'; 
    } 
} 

エラーは、Internet Explorerにあります。e.target.idは未定義です。IE e.target.idが動作していません

+0

投稿する前に投稿を確認することは本当に難しいですか?今回は少なくともあなたのコードを修正しました。あなたのコードを見るために他の人に時間をとらせてもらいたいので、読みやすくするために時間をかけてください。まだあなたのためにいくつかのフォーマットがあります。 – OregonGhost

+0

私はコードを挿入する方法を知りません。この情報はどこにありますか? – coderex

+0

コードを入力するときに、コードを選択して「101 010」ボタンを押します。 – Greg

答えて

40

IEはターゲットプロパティをサポートしていません。代わりにsrcElementを使用します。

変更:

if (e.target.id != 'show_calender') 

へ:

if (!e) e = window.event 

あなたの最終的なコードは次のようになります。

if ((e.target || e.srcElement).id != 'show_calender') 

また、あなたの関数の先頭にこれを追加する必要があります:

function check(e) { 
    if (!e) e = window.event; 
    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') { 
     if ((e.target || e.srcElement).id != 'show_calender') 
       obj.style.display='none'; 
    } 
} 
+1

IEが 'target'プロパティをサポートしていない場合、あなたのコード' e.target.id'はIEがヒットするとヌル参照エラーになります。 –

+0

'target'プロパティの' id'プロパティにアクセスしようとすると '(e.target.id || e.srcElement.id)'はまだIEにエラーを投げますが、 'target'はそうします存在しない。 –

+0

良いキャッチ。私は問題を修正しました。 – Prestaul

2

IEはイベントオブジェクトをパラメータとして渡しません。イベントオブジェクトは、eventというグローバル識別子としてアクセスされます。また、ターゲットという用語を使用しないで、代わりにsrcElementを使用します。

したがってIEのための同等のコードは次のとおりです。 -

function check() 
{ 

    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') 
    { 
     if (event.srcElement.id != 'show_calender') 
      obj.style.display='none'; 
    } 
} 

そのようにはJQueryなどのJavaScriptフレームワークはとても人気があるのはこのため。

+0

サー、ありがとうございました。 :) – coderex

2

従来のイベント処理ブラウザ間の問題があります。私はライブラリを使って、これをもっと簡単で簡単に扱うために、PrototypeJQueryYUIまたはMooToolsのようなアドバイスをしています。問題は、IEがイベントオブジェクトを渡さないことです。代わりに、グローバルオブジェクトとして見つけることができます。

5

Internet Explorerはイベントオブジェクトをイベントハンドラに渡しません。代わりにウィンドウオブジェクトのプロパティとして設定します。また、targetの代わりにsrcElementを使用します。お試しください


document.click = check; 

function check(e) 
{ 
    var target = e ? e.target : window.event.srcElement; 
    var obj = document.getElementById('calendar_widget'); 

    if (obj != 'null') 
    { 
     if (target.id != 'show_calender') 
       obj.style.display='none'; 
    } 
} 

+0

また、 'document.onclick = ...'ではなく、 'document.click = ...' –

+0

ああ、このjQuery ... :) –

関連する問題