Почему обработчик события click срабатывает сразу после загрузки страницы? - PullRequest
38 голосов
/ 18 августа 2011

Я играю с функцией, которую хочу привязать ко всем ссылкам. В настоящее время функция срабатывает при загрузке страницы, а не при нажатии на ссылку.

Вот мой код. (Я могу опубликовать функцию showDiv(), если вам нужно ее увидеть.) Можете ли вы сказать, что я здесь что-то делаю неправильно или глупо?

$(document).ready(function(){

    $('a.test').bind("click", showDiv());

});

Спасибо!

Ответы [ 4 ]

63 голосов
/ 18 августа 2011

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

showDiv() возвращает некоторое значение; если оператор return не использовался, возвращается undefined.

showDiv является ссылкой на функцию, которая должна быть выполнена.

Это должно работать:

$(document).ready(function(){
    $('a.test').bind("click", showDiv);
});

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

...bind('click', function(){
  foo.showDiv(a,b,c);
  ...more code...
});

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

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.

5 голосов
/ 18 августа 2011

Похоже, что вы вызываете функцию showDiv непосредственно там (и привязываете возвращаемый результат showDiv () к обработчику кликов вместо того, чтобы связывать его напрямую.

Вы хотите что-то вроде

$(document).ready(function() { $('a.test').bind("click", showDiv); });
4 голосов
/ 18 августа 2011

Используйте строку ниже.showDiv() вызовет функцию rigth далеко при выполнении этой строки.

$('a.test').bind("click", showDiv);
3 голосов
/ 18 августа 2011

Измените его на: $('a.test').bind("click", showDiv); (не ставьте парень вокруг showDiv, так как вы хотите передать ссылку на функцию).

...