Подтвердить что ты не робот

Почему обработчик события щелчка сразу срабатывает при загрузке страницы?

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

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

$(document).ready(function(){

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

});

Спасибо!

4b9b3361

Ответ 1

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

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.

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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