Почему обработчик событий click запускается сразу после загрузки страницы?
Я играю с функцией, которую я хочу привязать ко всем ссылкам. В настоящее время функция срабатывает при загрузке страницы, а не при нажатии на ссылку.
вот мой код. (Я могу пройти в функции showDiv()
Если вам нужно, чтобы увидеть его. Ты можешь сказать, я делаю что-то не так или глупо?
$(document).ready(function(){
$('a.test').bind("click", showDiv());
});
спасибо
4 ответов
вы хотите передать ссылка функции в качестве обратного вызова, а не результата выполнения функции:
showDiv()
возвращает некоторое значение; если нет return
заявления был использован, undefined
возвращается.
showDiv
- это ссылка на функцию, которая должна быть выполнена.
это должно работать:
$(document).ready(function(){
$('a.test').bind("click", showDiv);
});
кроме того, вы можете использовать анонимную функцию для выполнения более расширенной функции:
...bind('click', function(){
foo.showDiv(a,b,c);
...more code...
});
In некоторые обстоятельства вы можете хочу чтобы использовать значение, возвращаемое функцией в качестве обратного вызова:
function function foo(which)
{
function bar()
{
console.log('so very true');
}
function baz()
{
console.log('no way!');
}
return which ? bar : baz;
}
...click( foo( fizz ) );
в этом примере foo
оценивается с помощью fizz
и возвращает функцию, которая будет назначена в качестве обратного вызова для события click.
используйте нижеприведенную строку. showDiv()
вызовет функцию rigth прочь, когда эта строка будет выполнена.
$('a.test').bind("click", showDiv);
похоже, что вы вызываете функцию showDiv непосредственно там (и привязываете возвращаемый результат showDiv () к обработчику click вместо привязки его напрямую.
вы хотите что-то вроде
$(document).ready(function() { $('a.test').bind("click", showDiv); });
меняем его на: $('a.test').bind("click", showDiv);
(Не ставьте parens вокруг showDiv
поскольку вы хотите передать ссылку на функцию).