2012-05-31 3 views
7

Все, У меня есть некоторый код, который я пытаюсь отлаживать и я использовал следующий кусок кода в моей JS консоли:Что вызывает TypeError: undefined не является функцией?

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: Не удается прочитать свойство «нажмите» неопределенной

Может кто-нибудь дайте мне знать, какие другие причины я получаю эти ошибки? Если у меня есть конфликтный сценарий или что-то в этом роде, как я могу узнать, где конфликт?

Спасибо!

+0

не забудьте проверить, что вы получаете с помощью 'jQuery ('ul.breadcrumb [data-allownextonly]'). Data (" events ")'? – TheVillageIdiot

ответ

3

В соответствии с API jQuery метод .data(key) возвращает undefined, если согласованный элемент не имеет данных, соответствующих ключу. Посмотрите на его использование http://api.jquery.com/data/. Он работает только с первым элементом в согласованном наборе в любом случае, поэтому вы не можете использовать его для получения массива обработчиков событий кликов. Как есть, он говорит, что первый согласованный элемент не имеет атрибутов данных «события». После получения данных, которые прилагаются, сделайте

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

, чтобы собрать события щелчка.

0

Эта ошибка возникает при попытке выполнить неинициализированную или неправильно инициализированную функцию.

+0

Нет. Я не хотел, чтобы на клике не было круглых скобок, кто-то помогал мне отлаживать и предоставлял эту функцию, чтобы попытаться определить, что мой скрипт вызывал. – user1048676

0

Казалось бы, jQuery('ul.breadcrumb[data-allownextonly]').data("events") is undefined, поэтому любое разыменование на этом вызывает ошибку.

Btw, изменение $ до jQuery не изменится в вашем коде. Если jQuery не был загружен, это приведет к другой ошибке.

+0

Спасибо, да, я не понимаю, почему он не будет загружен правильно, поскольку работают другие объекты jQuery. Это странно, поскольку, когда я нажимаю на эту кучу jQuery, ничего не происходит. – user1048676

+0

@ user1048676 хорошо, вы проверили результат '.data ('events')'? –

+0

Он просто говорит undefined, поэтому нечего осматривать. Я новичок для отладки – user1048676