Я создаю простое приложение, использующее 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') работает нормально, даже если я изменю порядок.
это потому, что вы вызываете функцию предупреждения вместо того, чтобы передавать ссылку функции обратного вызова.
В вашем случае вы вызываете функцию alert()
и передаете значение, возвращаемое alert
в качестве обработчика события клика.
$('.tweet li a.username').on('click', function(){
alert('hey!')
});
Вам необходимо включить оповещение в функцию обратного вызова, как и в первом примере:
$('.tweet li a.username').on('click', function() { alert('hey!') });
Метод .on
ожидает объект JavaScript в этой позиции, в частности функцию, которую он может выполнить позже. Что происходит в вашем исходном коде, так это то, что движок JavaScript ищет функцию, но вместо этого видит там какой-то другой код - поэтому он выполняет там код (активирует предупреждение) в надежде, что будет возвращен полезный объект. (Когда ничего не возвращается, механизм JavaScript вместо этого предполагает, что вы хотите, чтобы null
был выполнен в событии клика, и он счастливо делает это.)