Вам не хватает всего смысла jQuery. Ваш предпочтительный метод не работает с jQuery, потому что jQuery не работает с отдельными элементами DOM. У одного элемента DOM есть свойство onclick, поэтому, если вы сделали что-то подобное, оно будет работать:
document.getElementById('bar').onclick = function() { // blah };
Тем не менее, jQuery - это всего лишь sets . Например, в вставленном вами коде вы пытаетесь связать что-то со всеми элементами с классом foo
. Делая подобные вещи, вы должны играть по правилам jQuery (и это хорошо!). Обернутый набор, т. Е. $('.foo')
- это , а не - это то же самое, что непосредственно получить элемент DOM, как я делал выше. Он будет , однако, будет содержать массив всех найденных элементов DOM, которые предоставляет jQuery. Таким образом, если бы в документе был один элемент с классом foo
, вы могли бы сделать:
$('.foo')[0].onclick = function() { // blah };
Это, однако, не рекомендуется, поскольку весь смысл jQuery состоит в том, чтобы абстрагироваться от всего этого специфического синтаксиса Javascript и позволить jQuery разобраться за вас. Вы должны принять это, поскольку это сделает ваш код намного чище и портативнее. Поэтому вы должны использовать функции click
или bind
:
$('.foo').click(function() {
// will bind something to all elements with a class of foo
});
$('.foo').bind('click', function() {
// functionally identical to the above, either is fine
});