簡體   English   中英

未定義變量的Javascript錯誤

[英]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)嗎? 我總是那樣做...

您應該測試該變量不為null,並且不等於undefined

這是一篇關於測試變量是否存在於Javascript中的好文章 它列出了執行此操作的各種方法以及每種方法的利弊。

我很少使用if(!r)來測試變量是否未定義。

我更喜歡使用if(typeof(r)=='undefined')或if(r!= null)。

r的值取決於它的聲明和影響。

  • var r; =>未定義,但可測試為null(r == null將返回true)
  • var r =“ test”; =>字符串測試
  • var r = null; => null;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM