Why does click event handler fire immediately upon page load?

前端 未结 4 846
一整个雨季
一整个雨季 2020-11-21 06:50

I playing around with a function that I want to bind to all the links. At the present the function fires when the page loads, instead of when I click on the link.

H

4条回答
  •  说谎
    说谎 (楼主)
    2020-11-21 07:36

    You want to pass a reference to a function as a callback, and not the result of function execution:

    showDiv() returns some value; if no return statement was used, undefined is returned.

    showDiv is a reference to the function that should be executed.

    This should work:

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

    Alternatively, you could use an anonymous function to perform a more advanced function:

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

    In some circumstances you may want to use the value returned by a function as a callback:

    function function foo(which)
    {
      function bar()
      {
        console.log('so very true');
      }
      function baz()
      {
        console.log('no way!');
      }
      return which ? bar : baz;
    }
    
    ...click( foo( fizz ) );
    

    In this example, foo is evaluated using fizz and returns a function that will be assigned as the callback for the click event.

提交回复
热议问题