2

IE7のJSに問題があります。私は、特定のオブジェクトにclassName(DOMのHTMLElementオブジェクト)が割り当てられているかどうかを調べるためにテストを行っています。Internet Explorer 7 - Javascript 'undefined'がテストされていません

さて、Firefoxでページをテストすると、はい、変数が定義されていないと言われます(すべての私のテストは、以下の警告を行う()。IEでは

は、テストのいずれも通過していない、変数は、上で割り当てられますIF文、および最後の警告時の最後の()IEは fn_note.className声明に基づいて、エラー「classNameがnullまたはオブジェクトではありませんである」チャックここ

コードです:。

 var fn_note; 
     var kids = area.childNodes; 
     for (var l = 0; l < kids.length; l++){ 
      //DEBUG check if the found var exists 
      if (kids[l].className == null){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is null: --'+kids[l]+'--'); 
      } 
      if (kids[l].className == undefined){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is undefined: --'+kids[l]+'--'); 
      }      
      if (kids[l].className == ''){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is an empty string: --'+kids[l]+'--'); 
      } 
      if (typeof kids[l].className === 'undefined'){ 
       //then the className var doens't exist 
       alert ('the classsname for the following var is NEW TYPEOF TEST: --'+kids[l]+'--'); 
      }      

      if (kids[l].className == 'fn-note') { /* (/fn-note$/).test(kids[l].className) IE doesn't really like regex. por supuesto */ 
       //we have found the div we want to hide 
       fn_note = kids[l];      
      } 
     }      
     alert('the clicked on className is '+area.className+'name of the found div is '+fn_note.className); 

私に知らせてください私が間違ってやっていること基本的なことだけど、それはATMだとは思えない。

ありがとうございます。

+0

IE7でテスト済みです:http://jsbin.com/azoya/空文字列を報告します。 – strager

+0

またここで空の文字列をテストしました – eglasius

答えて

1

を限り、私はあなたがが本当にのchildNodesコレクション内のclassName「のFN-ノート」とchildNodeがあるかどうがあるかを知りたいだけの事を見ることができるように。だから、もう少しrigourousテストを実行します。

for (var l = 0; l < kids.length; l++){ 
    if (kids[l] 
     && kids[l].className 
     && kids[l].className.match(/fn\-note$/i)) { 
     fn_note = kids[l]; 
    } 
} 

これは十分なものでなければならない(正規表現でのダッシュをエスケープ心を行います)。

6

私はあなたがプロパティから得たものは文字列ではなく、 'undefined'型のオブジェクトだと思います。これを試してみてください:

if (typeof(kids[l].className) == 'undefined') { 
+0

そのコードはすでに例にあります – pope

+0

まあまあです。このコードでは、文字列型の追加チェックが行われます。これはまったく必要ではなく、実際に問題を引き起こす可能性があります。リテラル文字列型があり、Stringオブジェクトがあり、同じ型として評価されない可能性があります。 – Guffa

+0

あなたも助けてくれてありがとう。 –

関連する問題