【问题标题】:Why is this part of the jquery source undefined?为什么 jquery 源的这一部分未定义?
【发布时间】:2014-02-01 23:07:42
【问题描述】:

我正在使用 Jquery1.7.1 构建一个应用程序,其中控制台出现以下错误:

for (n = 0; n < r.length; n++) s = r[n], (e || k === s.origType) && (!c || c.guid === s.guid) && (!l || l.test(s.namespace)) && (!d || d === s.selector || d === "**" && s.selector) && (r.splice(n--, 1), s.selector && r.delegateCount--, p.remove && p.remove.call(a, s));

未定义。执行此操作时出现此错误:

function goToIndex() {
pageView.setCurrentPage(pageView.getIndex());
pageView.setNav(pageView.getIndexNav());
ko.applyBindings(pageView);
}

这不涉及 jquery,所以我不确定为什么会这样。唯一与此相关的 jquery 是前一个函数的单击处理程序,但它调用了一个 socket.io 事件,该事件转到 node.js 服务器,返回事件调用此函数。如果有人可以提供帮助,将不胜感激。

【问题讨论】:

  • jQuery 源代码不是未定义的。我认为您没有正确阅读错误消息。
  • 这就是控制台所说的:'19:46:10.352 TypeError: s is undefined jquery-1.7.1.js:14'
  • 那一行是代码的第一部分
  • 你必须明白解析器错误发生在那里。根本原因几乎可以肯定是在您的代码中,而不是您的库(即 jQuery)
  • 我明白这一点,我希望有人能指出我应该看的方向。

标签: javascript jquery node.js knockout.js socket.io


【解决方案1】:

您的标题中的问题(“为什么 jQuery 源代码的这部分未定义?”)已在 cmets 中得到解答:jQuery 源代码中没有未定义的部分,它只是被要求处理一个未定义的变量。

所问的问题(“为什么我会收到“xxx 未定义”错误?”)无法回答,而不是没有更多资源来重现该问题。

在 cmets 中,您问了一个替代问题:“有人能指出我应该看的方向吗”。 @Blazemonger 有答案:查看您的 JavaScript 调试器以确定问题的根源。

当您使用调试器进入代码时,加载uncompressed version of your jQuery 肯定有助于理解这个问题。根据您在问题中发布的 jQuery 的 sn-p(特别是“delegateCount--”),我想说这里是例外:

// Detach an event or set of events from an element
remove: function( elem, types, handler, selector, mappedTypes ) {
        // ... abbreviated

        // Remove matching events
        for ( j = 0; j < eventType.length; j++ ) {
            handleObj = eventType[ j ];

            if ( ( mappedTypes || origType === handleObj.origType ) &&
                 ( !handler || handler.guid === handleObj.guid ) &&
                 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
                 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
                eventType.splice( j--, 1 );

                if ( handleObj.selector ) {
                    eventType.delegateCount--;
                }
                if ( special.remove ) {
                    special.remove.call( elem, handleObj );
                }
            }
        }

        // ... abbreviated
}

压缩的s 变量与未压缩的handleObj 变量匹配。当你在那里进入调试器时,一定要检查局部变量的值,如果需要,在调用堆栈中检查你的代码在哪里调用 jQuery。

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 2013-01-26
    • 2013-09-13
    • 1970-01-01
    • 2015-11-08
    • 2012-09-30
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多