2011-08-11 35 views
0
$(document).ready(function(){ 
setTimeout(function() { 
     window.location.href = $(".user a")[0].href; 
    }, 2000); 
}); 

我把上面的jQuery代碼在一個js file.which在一些頁面的站點的標題template.but調用(沒有.user a)顯示IE狀態欄上的錯誤「0.href is null or not an object。如何防止錯誤顯示。如何在jQuery中嘗試錯誤?

回答

7

檢查whwther有選擇.user a匹配其頁面上的任何元素,嘗試從第一個讀前:

$(document).ready(function(){ 
setTimeout(function() { 
     if($(".user a").length) 
     { 
      window.location.href = $(".user a")[0].href; 
     } 
    }, 2000); 
}); 

如其他地方提到的,它可能是改變這一行是個好主意還對:

window.location.href = $(".user a").eq(0).attr("href"); 
+1

你也應該代替使用.attr( 「HREF」)剛剛.href。 – niaher

+1

@niaher - 不能這樣做,除非你使用'eq(0)'來獲得一個jQuery對象。訪問數組讓你成爲一個HTMLElement – Jamiec

+0

直接使用'.href'也比使用jQuery調用更快... –

1
$(document).ready(function(){ 
     setTimeout(function() {   
     try { 
      window.location.href = $(".user a")[0].href; 
      } catch (e) {  
      alert('error so no redirect'); 
    } 
    }, 2000); 
}); 

http://jsfiddle.net/

爲指針出由@Jamiec,你可以做$(".user a").length和檢查元素的存在與否。正如你問題標題所說的那樣,我提出了這種方式(托盤捕捉)。

+0

不是一個好主意,因爲有一個已知場景,頁面中不存在「.user a」對象 - 因此它不是「特殊」情況。此外,有一個簡單的解決方法 - 檢查結果數組的長度(如在這個thrad的其他答案中提出的) – naivists

+0

編輯我的答案! –

+0

它仍然是一個不好的答案。考慮一個不同的比喻。假設我問:「我如何用鞋釘敲釘子?」..有一個字面的答案,但它是錯誤的(答案:不要使用鞋子,使用錘子)。在這種情況下,答案是「不使用try..catch,首先檢查您正在嘗試讀取的元素是否可用」。 – Jamiec

2
$(document).ready(function(){ 
setTimeout(function() { 
     if ($(".user a").length > 0) 
      window.location.href = $(".user a")[0].href; 
    }, 2000); 
}); 
-1

你需要使用jQuery的屬性,以防止跨瀏覽器的差異

$(document).ready(function(){ 
    setTimeout(function() { 
      window.location.href = $(".user a").eq(0).attr('href'); 
     }, 2000); 
    }); 
+0

請在downvoting時留下評論!如果你不說,爲什麼這是一個糟糕的解決方案,人們不會去學習。 –

+0

你在跟我說話嗎?我並沒有在這裏降低某人的薪水,我只是提高了jamaic,因爲它的答案是正確的。與此相反,我迅速將問題二解決並給出了一個錯誤的答案... – dmidz

+0

你誤會了 - 有人低估了你*!但他們沒有解釋爲什麼他們認爲你的答案很差。我的評論是針對downvoter的,而不是針對你的! (我對「downvote and run」的人有問題!):) –