未捕获的TypeError:无法读取未定义的属性“焦点”

时间:2014-04-23 17:13:55

标签: javascript jquery jquery-ui

我的网页加载时会出现此问题。

使用以下脚本 -jquery.simplemodal-1.4.3.js -jquery v1.7.1

下面是一个小代码片段,其中包含simplemodal中发生此错误的代码。

 focus: function (pos) {  
 var s = this, p = pos && $.inArray(pos, ['first', 'last']) !== -1 ? pos : 'first';
     // focus on dialog or the first visible/enabled input element
       var input = $(':input:enabled:visible:' + p, s.d.wrap);
       setTimeout(function () {
    input.length > 0 ? input.focus() : s.d.wrap.focus();
    }, 10);
  },

我能解决这个问题的任何想法都很棒

1 个答案:

答案 0 :(得分:1)

这是一个古老的问题,原始海报可能已经解决了他的具体问题 但是与错误消息相关的一般问题:

  • 未捕获的TypeError:无法读取属性' ...'未定义的
  • 未捕获的TypeError:无法读取属性' ...'为null
  • 未捕获的TypeError:无法设置属性' ...'未定义的
  • 未捕获的TypeError:无法设置属性' ...'为null

对许多人来说仍然很重要,并且有一个简单而通用的答案:

  

我们尝试读取属性,设置属性或调用函数的对象     - 未申报或     - 已声明,但未定义或
    - 为空

Google Chrome中的简单测试代码

<script type="text/javascript">
// object obj is not declared, there is no previos 'var obj;'
obj.prop;              // Uncaught TypeError: Cannot read property 'prop' of undefined
obj.prop = "value1";   // Uncaught TypeError: Cannot set property 'prop' of undefined
obj.func();            // Uncaught TypeError: Cannot read property 'func' of undefined
// ------------------------------------------------------------------------
// object 'obj' is declared with:
var obj;
// but it is not defined, there is no value assigned to it (obj = 5 or something else)
obj.prop;              // Uncaught TypeError: Cannot read property 'prop' of undefined
obj.prop = "value1";   // Uncaught TypeError: Cannot set property 'prop' of undefined
obj.func();            // Uncaught TypeError: Cannot read property 'func' of undefined
// ------------------------------------------------------------------------
// object 'obj' is declared and defined. Value is null
var obj = null;
obj.prop;              // Uncaught TypeError: Cannot read property 'prop' of null
obj.prop = "value1";   // Uncaught TypeError: Cannot set property 'prop' of null
obj.func();            // Uncaught TypeError: Cannot read property 'func' of null
// ------------------------------------------------------------------------
// object 'obj' is declared and defined
var obj = {prop: "propertyValue", func: function() {return "returnValue"}}
// there are no errors
</script>

Firefox中的相同代码:

// object obj is not declared, there is no previos 'var obj;'
obj.prop;              // Uncaught TypeError: obj is undefined
obj.prop = "value1";   // Uncaught TypeError: obj is undefined
obj.func();            // Uncaught TypeError: obj is undefined
-----------------------------------
// object 'obj' is declared with:
var obj;
// but it is not defined, there is no value assigned to it (obj = 5 or something else)
obj.prop;              // Uncaught TypeError: obj is undefined
obj.prop = "value1";   // Uncaught TypeError: obj is undefined
obj.func();            // Uncaught TypeError: obj is undefined
-----------------------------------
// object 'obj' is declared and defined. Value is null
var obj = null;
obj.prop;              // Uncaught TypeError: obj is null
obj.prop = "value1";   // Uncaught TypeError: obj is null
obj.func();            // Uncaught TypeError: obj is null
-----------------------------------
// object 'obj' is declared and defined
var obj = {prop: "propertyValue", func: function() {return "returnValue"}}
// there are no errors

因此浏览器之间的错误消息存在一些差异,但按摩很明确:

  

未定义的对象或null。

在一般情况下,很容易理解错误消息的确切含义。

但为什么在具体情况下会发生这种情况?

原因可能很多,但重要的原因可能是:

  • 调用函数或访问属性

    • 在初始化/定义之前 如果动态创建的对象(弹出窗口,模态)尚未就绪,则可能会发生这些情况。
    • 销毁后
  • 使用API​​的新版本进行结构更改,其中属性或函数为

    • 重命名或
    • 移至其他对象
  • 通过在数组上使用循环:索引不存在,因为

    • 不良增量/减量或
    • 状况不佳

如何调试?

  • 查找引发错误的对象和位置
  • 阅读文档以确保
    • 尝试在正确的位置使用该对象,
    • 在使用对象之前调用了所有需要的函数
  • 查看范围/函数,如果定义了对象,
  • 如果没有,请查看其调用者的堆栈跟踪...