代码之家  ›  专栏  ›  技术社区  ›  user105090

为什么在使用click事件处理程序时执行非匿名函数?

  •  8
  • user105090  · 技术社区  · 15 年前

    但是页面加载时,警报框会立即弹出!我做错了什么?(注释部分做了完全相同的事情)。

    如果我像这样定义bclick()函数

    function bclick(foo, bar){ ... }
    

    结果也是一样的。

    <script type="text/javascript">
    
    var bclick = function(foo, bar){alert( foo + "  " + bar + "\n");}
    
    //$(document).ready(function(){
    //    $("button").click(bclick("Button","Clicked"));
    //    });
    
    $("button").click(bclick("Button","Clicked"));
    
    </script>
    

    正文中的相关HTML:

    <button>Click Me!</button> 
    
    3 回复  |  直到 10 年前
        1
  •  20
  •   Sasha Chedygov    11 年前

    在通过功能之前,您正在评估功能。

    $("button").click(bclick("Button","Clicked"));
    

    bclick 使用这些参数调用,并且 后果 正在传递给 click 方法您希望像传递普通变量一样传递它,如下所示:

    $("button").click(bclick);
    

    不过,这一点的明显问题是,您无法传入自定义参数。

    您还可以传入一个调用您的函数的匿名函数:

    $("button").click(function() { bclick("Button", "Clicked"); });
    
        2
  •  1
  •   Sasha Chedygov    15 年前

    return this 在bclick函数的末尾。

        3
  •  1
  •   josh3736    11 年前

    $("button").click(bclick("Button","Clicked"));
    
    function bclick(foo, bar) { // called once when the event handler is setup
        return function(e) { // called every time the event is triggered
            // you still have the original `foo` and `bar` in scope,
            // and a new `e` (event object) every time the button is clicked
            console.log(foo, bar, e);
        };
    }