是什么导致TypeError:undefined不是函数?

时间:2012-05-31 03:21:23

标签: jquery

全部, 我有一些我正在尝试调试的代码,我在JS控制台中使用了以下代码:

clickEvents = $('ul.breadcrumb[data-allownextonly]').data("events").click;
jQuery.each(clickEvents, function(key, value) {
    console.log(value.handler);
})

当我执行此操作时,我收到错误: TypeError:undefined不是函数

我的问题是导致这种情况发生的原因?从我阅读的大部分内容来看,它处理的事实是jQuery未正确加载或两个脚本之间存在冲突。 jQuery正在加载正确,因为我的页面上有其他对象jQuery工作正常。我正在使用Wordpress,因此已经没有冲突了。

在我的控制台中,我将我的JS调试更改为:

 clickEvents = jQuery('ul.breadcrumb[data-allownextonly]').data("events").click;
jQuery.each(clickEvents, function(key, value) {
    console.log(value.handler);
})

当我执行此操作时,我收到以下错误: TypeError:无法读取未定义的属性“click”

有谁能让我知道我会得到这些错误的其他原因?如果我有一个冲突的脚本或类似的东西,我怎么能找出冲突的位置?

谢谢!

3 个答案:

答案 0 :(得分:3)

根据jQuery API,如果匹配的元素没有与该键匹配的任何数据,则.data( key )方法返回undefined。看看它的用法http://api.jquery.com/data/。它在任何情况下都只对匹配集中的第一个元素进行操作,因此您无法使用它来获取点击事件处理程序的数组。原样,它说第一个匹配的元素没有数据属性“events”。获得附加的数据后,执行

var clickEvents = [];
$( selector ).data( key ).each( function() { 
    clickEvents.push( $(this).click );
});

收集点击事件。

答案 1 :(得分:0)

当您尝试执行未初始化或未正确初始化的函数时,会出现该错误。

答案 2 :(得分:0)

jQuery('ul.breadcrumb[data-allownextonly]').data("events")似乎undefined,因此任何解除引用都会引发错误。

顺便说一句,将$更改为jQuery在您的代码中不会有太大变化。如果没有加载jQuery,它会产生不同的错误。