当前位置:  开发笔记 > 编程语言 > 正文

未定义变量的Javascript错误

如何解决《未定义变量的Javascript错误》经验,为你挑选了1个好方法。

我有一个问题,即方法获得未定义的变量错误,即使我在调用之前检查变量是否未定义.

// 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未定义,这是r.focus行.该方法的所有调用者也在同一个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是我检查过的方法之一,似乎很好(没问题).不过我会再看一下这个:

它用于处理向下箭头并输入用于在输入元素表中导航的键.



1> Dan Lew..:

根据您对问题的描述,在我看来,它有时会在没有完整性检查的情况下被调用.我将完整性检查放在函数内部而不是它之外.

但是,你也可能想知道你是如何绕过它的.我将修改函数如下,以检查Firebug中出现的问题:

idNav.prototype.setFocusFromVar = function(r) {
    if (!r) {
        return;  // Set the breakpoint here
    }
    document.activeInputArea = r;
    r.focus();
    r.select();
}

然后,当您点击断点时,您可以查看Firebug的堆栈跟踪,以确定如何在不检查r是否已定义的情况下获取该函数.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有