2009-08-15 4 views
2

Вот отрывок из моего кода:JQuery .click() событие неприятности

$(".item").click(function() { 
     alert("clicked!"); 
    }); 

И у меня есть (гипотетически; в действительности это гораздо более сложная) следующие на моей странице:

<a href="#" class="item"><img src="1.jpg" /></a> 

Однако, когда я нажимаю изображение, я не получаю предупреждение.

Какая у меня ошибка?

+0

Является ли ваш реальный код внутри '$ (document) .ready()'? –

+0

Да, это - и у меня есть другой код, который работает и работает. – Isaac

ответ

4

Первый вопрос: вы добавляете элемент, который нужно щелкнуть динамически? Если это, , вы должны использовать живое событие, так как это будет зависеть от динамически создаваемых элементов.

http://docs.jquery.com/Events/live#typefn

+0

Тот факт, что я динамически добавлял события, был проблемой - я в конечном итоге исправил его, вызвав функцию явно после того, как элементы были добавлены, вызвав функцию из функции успеха. Спасибо! – Isaac

0

Используйте bind.

$ (". Item"). Bind ("click", function (e) {...});

+0

Это не работает. – Isaac

+0

Если это не так, то что-то не так где-то в другом месте. http://docs.jquery.com/Events/bind#typedatafn – Shaun

+1

'.bind ('click', fn)' и '.click (fn)' эквивалентны. Фактически '.click()' использует '.bind ('click', fn)'. Проверьте строку 3099 jQuery 1.3.2, не сжатый, неинициализированный источник, если вы хотите сами убедиться. – dcharles

5

Является ли ваш селектор фактически подходящим для чего-либо? Попробуйте использовать отладочный плагин JQuery (http://jquery.glyphix.com/) и делает это:

$(".item").debug().click(function() { 
    alert("clicked!"); 
}); 

.debug() будет записывать все, что согласуется с консоли Firebug (вы используете поджигатель, верно :-)?) Без «разрыва цепи «так что вы можете использовать его в виде строки.

Если это окажется правильным, может возникнуть проблема с браузером, который переходит на «#», прежде чем он сможет отобразить ваше предупреждение. Попробуйте использовать метод .preventDefault() для объекта события, чтобы предотвратить это:

$(".item").click(function(evt) { 
    evt.preventDefault(); 
    alert("clicked!"); 
}); 
+0

Это оказалось не работать ... возможно, я должен приложить весь свой код и XHTML? Также кажется, что (когда я смотрел на источник) динамически добавленный HTML (через JJQuery AJAX) на самом деле не был в исходном коде, но доступен для просмотра с помощью инспектора Firebug или Safari. Я не уверен, что это нормально или нет. – Isaac

+1

Ваш код фрагмента ( ) загружается динамически? Если так, то это очень важная информация! –

+0

Это добавляется динамически, и я честно не понимаю, что было значительным. Я новичок в Javascript, действительно начал использовать его всего пару дней назад. Почему это меняет способ работы $ .click()? Мне кажется, что мне неинтересно, но я полагаю, что .click() привязан к объектам, которые загружаются в DOM во время документа .ready(). Таким образом, использование функции live() или явного вызова функции click() после загрузки элементов является исправлением. Спасибо вам всем! – Isaac

0

Изменение селектора?

$ ("Пункт> IMG")

+0

Нет кубиков. Я не думаю, что проблема связана с селектором (я много пробовал). – Isaac

0

У меня была эта проблема в последнее время после добавления контекстного меню JQuery плагин. Заглушка была привязана к событию щелчка тела, а затем отключала событие click - казалось, удалила все привязки для события click для всех элементов. Возможно, предложение отключить плагины или проверить, что вы не отвязываете клик для родительского элемента самостоятельно.

0

Код, который вы разместили правильно, так что я подозреваю, что есть что-то еще, что вы не учли.

Во-первых, если была ошибка где-то (даже не в том точном бите кода), что может привести к ее прекращению. Поставьте предупреждение сразу после этой строки, чтобы проверить, что он работает.

Убедитесь, что другие элементы не захватывают событие и не прекращают его распространение. Это укусило меня раньше в прошлом ... Если есть что-то еще, обрабатывающее щелчок, который имеет в нем stopPropagation() или return false, это может быть проблемой.

0

Одна вещь, которую я нашел (хотя только со ссылками, идущими в другом месте), заключается в том, что добавление возвращает false; может помочь, если он просто стреляет якорем вместо оценки предупреждения. Я не могу сказать, почему это так, но это решение, которое я нашел в аналогичной проблеме в последнее время.

Смежные вопросы