Почему это событие клика автоматически запускается в jQuery?

0

Я создаю простое приложение, использующее JS/jQuery в качестве учебного упражнения, и я столкнулся с проблемой, с которой я столкнулся раньше, и не могу ее решить. Почему, в следующем коде, срабатывает второй клик, а не когда я нажимаю $ ('. Tweet li a.username')?

$(function(){
   setInterval(update, 3000);
    $('.showMore').on('click', function() {
      moreIndex += 5;
      update();
    })
    $('.tweet li a.username').on('click', alert('hey!'));
  });

alert ('hey!') является filler для функции, которую я все еще разрабатываю. Как это организовать, чтобы событие клика срабатывало при нажатии ссылки, а не при загрузке страницы? Событие $ ('. ShowMore') работает нормально, даже если я изменю порядок.

Теги:

2 ответа

3
Лучший ответ

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

В вашем случае вы вызываете функцию alert() и передаете значение, возвращаемое alert в качестве обработчика события клика.

$('.tweet li a.username').on('click', function(){
    alert('hey!')
});
  • 0
    Понял. Пробовал это раньше и не получил предупреждение. Я просто должен неправильно выбрать селектор.
1

Вам необходимо включить оповещение в функцию обратного вызова, как и в первом примере:

$('.tweet li a.username').on('click', function() { alert('hey!') });

Метод .on ожидает объект JavaScript в этой позиции, в частности функцию, которую он может выполнить позже. Что происходит в вашем исходном коде, так это то, что движок JavaScript ищет функцию, но вместо этого видит там какой-то другой код - поэтому он выполняет там код (активирует предупреждение) в надежде, что будет возвращен полезный объект. (Когда ничего не возвращается, механизм JavaScript вместо этого предполагает, что вы хотите, чтобы null был выполнен в событии клика, и он счастливо делает это.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню