jQuery显示/隐藏返回未定义的、中断的插件



在过去的一周里,我遇到了jCrop、无限滚动和jQuery UI都崩溃了,并出现了错误消息"Unaught TypeError:无法调用未定义的方法'x'"。我已经将所有错误跟踪到类似$el.hide().chain(stuff);的行中。出于某种原因,show和hide不会返回任何内容。

我下载了jQuery 2.0.3文件的未压缩副本,并开始放入控制台日志,这真的很奇怪。在jQuery文件中的showHide和show/hide函数中,定义了返回值。然而,jQuery集合似乎在离开显示/隐藏函数后就丢失了。下面是我在Chrome浏览器控制台中测试它的一个例子。

console.log( $("#curate [name='series']") )
[input.ui-autocomplete-input, prevObject: jQuery.fn.jQuery.init[1], context: document,     selector: "#curate [name='series']", jquery: "2.0.3", constructor: function…] VM4093:2
undefined
console.log( $("#curate [name='series']").show() )
inside showHide jquery-2.0.3.js:6164
[input.ui-autocomplete-input, prevObject: jQuery.fn.jQuery.init[1], context: document, selector: "#curate [name='series']", jquery: "2.0.3", constructor: function…] jquery-2.0.3.js:6165
Inside show jquery-2.0.3.js:6194
[input.ui-autocomplete-input, prevObject: jQuery.fn.jQuery.init[1], context: document, selector: "#curate [name='series']", jquery: "2.0.3", constructor: function…] jquery-2.0.3.js:6195
undefined VM4094:2
undefined
console.log( $("#curate [name='series']").show().val() )
inside showHide jquery-2.0.3.js:6164
[input.ui-autocomplete-input, prevObject: jQuery.fn.jQuery.init[1], context: document, selector: "#curate [name='series']", jquery: "2.0.3", constructor: function…] jquery-2.0.3.js:6165
Inside show jquery-2.0.3.js:6194
[input.ui-autocomplete-input, prevObject: jQuery.fn.jQuery.init[1], context: document, selector: "#curate [name='series']", jquery: "2.0.3", constructor: function…] jquery-2.0.3.js:6195
TypeError: Cannot call method 'val' of undefined

这里可能发生什么?元素似乎一离开显示/隐藏功能就消失了。另一个javascript库会以这种方式干扰jQuery以产生这种结果吗?您可以在这里看到我修改过的jQuery文件版本,以确保我没有简单地忘记返回元素或类似的东西。https://completeset.com/includes/js/jquery-2.0.3.js

问题是我使用的代码http://maximeparmentier.com/2012/11/06/bind-show-hide-events-with-jquery/将事件处理程序附加到显示和隐藏函数。在这样做的过程中,我没有注意到评论中的警告,即给定的函数会中断显示和隐藏函数上的链接。指出这一点的评论也为这个问题提供了解决方案。

最新更新