[英]Javascript error with undefined variable
我有一個問題,即即使我在調用之前檢查了未定義的變量,方法也會收到未定義的變量錯誤。
// Sets focus and text-select to the passed in element.
idNav.prototype.setFocusFromVar = function(r) {
document.activeInputArea = r; // my variable for tracking focus
r.focus(); // error happens here (line 274 of idNav.js)
r.select();
}
該錯誤發生在r.focus行。
在調用方法的兩個地方,我都使用與以下類似的模式,並在調用方中使用局部變量r。
if (!r)
return;
this.setFocusFromVar(r);
但是錯誤仍然存在。 當r不為null或未定義時,它是我網頁上表中的輸入元素。
我繼續在idNav.js的第274行(即r.focus行)上未定義r。 該方法的所有調用者也都在同一個js文件中。
我想念什么?
此錯誤在Firefox中間歇性地發生,我尚未在IE中測試此特定錯誤。
EDTA:r確實顯示為未定義,並且錯誤的堆棧跟蹤顯示:
setFocusFromVar()(undefined)IDNav.js (line 275)
dhandler(Object originalEvent=Event keydown type=keydown)IDNav.js (line 100)
newTrigger()(Object originalEvent=Event keydown type=keydown)jquery.hotkeys.js (line 1)
F()()jquery.js (line 19)
F()(Object originalEvent=Event keydown type=keydown)jquery.js (line 19)
F()()jquery.js (line 19)
[Break on this error] r.focus();
dhandler是我簽出的方法之一,看起來不錯(沒問題)。 我將再次對此進行確認:
它用於處理向下箭頭,並輸入用於在我的輸入元素表中導航的鍵。
根據您對問題的描述,在我看來,有時不進行健全性檢查就調用它。 我將健全性檢查放在函數內部而不是外部。
但是,您可能首先也想知道如何解決它。 我將如下修改函數,以檢查Firebug出了什么問題:
idNav.prototype.setFocusFromVar = function(r) {
if (!r) {
return; // Set the breakpoint here
}
document.activeInputArea = r;
r.focus();
r.select();
}
然后,當您達到斷點時,可以查看Firebug的堆棧跟蹤來確定如何獲得該函數,而無需檢查是否已定義r。
我建議按以下方式在功能內移動(或復制)您的健全性檢查:
idNav.prototype.setFocusFromVar = function(r) {
if (!r)
return;
document.activeInputArea = r; // my variable for tracking focus
r.focus(); // error happens here (line 274 of idNav.js)
r.select();
}
我不是很確定,但是您不應該調用if(r == undefined)而不是if(!r)嗎? 我總是那樣做...
我很少使用if(!r)來測試變量是否未定義。
我更喜歡使用if(typeof(r)=='undefined')或if(r!= null)。
r的值取決於它的聲明和影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.