Почему обработчик событий 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 поскольку вы хотите передать ссылку на функцию).