2012-09-25 80 views
1

我試圖編寫一段代碼,當單擊按鈕時,它會檢查圖像列表,檢查它是否具有「視頻」ID,如果它確實如此顯示覆蓋圖並移除那裏的玩家。嘗試更改圖像狀態時未捕獲TypeError

我不斷收到此錯誤:

Uncaught TypeError: Cannot call method 'indexOf' of undefined 

這裏是代碼:

$("#actions .btn").click(function(){ 
     $('.span img').each(function(){ 
      if($(this).attr('id').indexOf('video') != -1){ 
       var spanid = $(this).attr('id').replace(/video/, ''); 
       $(this).removeClass('hideicon'); 
       $('#mediaplayer' + spanid + '_wrapper').remove(); 
      } 
     }); 
}); 

回答

1

.attr()方法將返回undefined,如果你正在尋找的屬性沒有在元素上存在。我建議增加一個額外的檢查,以你的條件:

var id = $(this).attr('id'); 
if(id && id.indexOf('video') != -1) { 
    //OK! 
} 

從文檔:

As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set.

有趣的是,本機getAttribute函數返回null對於尚未設置的屬性。 jQuery,由於某種原因,explicity checks for this並返回undefined,而不是:

ret = elem.getAttribute(name); 

// Non-existent attributes return null, we normalize to undefined 
return ret === null ? undefined : ret; 
+0

啊好聲音。我添加了額外的支票,現在功能正常。這也是部分範圍問題。我的錯誤。謝謝您的幫助! – MrFirthy

+0

@ user1694888 - 不客氣,很高興我可以幫忙:) –

相關問題