2016-12-10 2 views
1

私のテーブルのすべてtrにタイトルattrを追加するためにこの関数を使用します。テーブルの内容は配列から取得されます。それはうまく動作します。しかし、私はテーブルに手動で行を追加する機能も持っています。これらの行については、例外が発生します。彼らは配列にないので、かなり明確です。しかし、どうすればこれらの例外を回避できますか?これらの行にタイトルを追加する必要はありません。...のプロパティを読み取ることができません。未定義

それは言う:

エラー"未定義のプロパティを読み取ることができません 'dictCanon'"が上のトリガされ

function postBody() { 
    // add title to tr 
    var trs = $table.find('tbody').children(); 
    for (var i = 0; i < trs.length; i++) { 
     $(trs[i]).mouseover(function(e) { 
      index = $(e.currentTarget).data('index'); 
      var d = (diagnosis[index].additionalParameters); 
      console.log('d', d); 
      dt = $(e.currentTarget).parent().parent().find('thead').find('th') 
            .eq($(e.currentTarget).data('index')).data(); 
      //console.log(dictCanon); 
      if (d != undefined || d !== 'null') { 
       var dictCanon = diagnosis[index].additionalParameters.dictCanon; 
       var icd = diagnosis[index].additionalParameters.icd; 
       $(this).attr('title',icd + ' ' + dictCanon); 
      } 
     });     
    }; 
}; 
+0

エラーメッセージを投稿できますか?多くの場合、「のプロパティは未定義です」と表示されます。これは、エラーがどこで発生したかを特定する際に役立ちます。または、行番号を確認して、どの行を見るかを教えてください。 – gyre

+0

「診断」とは何ですか?それは定義されていません。また、 'index' –

+0

@Michelem、' index'はイベントハンドラで取得され、イベントハンドラが作成された時点では 'i'の値に対応します。 – trincot

答えて

1

プロパティ 'dictCanon' 未定義の(...)を読み取ることができません。この式:

diagnosis[index].additionalParameters.dictCanon 

...私あなたはdiagnosisにはadditionalParametersのプロパティを持たないエントリがあります。あなたはそのエラーに対してコードを保護しようとしましたが、間違った論理演算子でそれを行いました。 ||の代わりに&&を使用し、nullを引用符で囲まないでください。私はまた、diagnosisに必要なエントリを持っていることを確認するためにforループ内で条件を適応することをお勧め:

function postBody() { 
    // add title to tr 
    var trs = $table.find('tbody').children(); 
    for (var i = 0; i < trs.length && i < diagnosis.length; i++) { 
     $(trs[i]).mouseover(function(e) { 
      var index = $(e.currentTarget).data('index'); // use `var` 
      var d = diagnosis[index].additionalParameters // parentheses not needed 
      console.log('d', d); 
      dt = $(e.currentTarget).parent().parent().find('thead').find('th') 
            .eq(index).data(); // you have `index`, use it 
      //console.log(dictCanon); 
      if (d !== undefined && d !== null) { // <--- changed! 
       var dictCanon = d.dictCanon; // <-- you have `d`, use it 
       var icd = d.icd; // <-- idem 
       $(this).attr('title',icd + ' ' + dictCanon); 
      } 
     });     
    }; 
}; 

注意も他のいくつかの変更は私が作った...コード内のコメントを参照してください。

+0

岩、ありがとう、私の日を救う! – mm1975

関連する問題