jQuery变量传递

时间:2012-07-01 12:30:28

标签: jquery parameter-passing

我正在浏览一些jQuery教程,但我似乎无法找到这种混淆的灵感。

<div id="container">

        <a href="#">Click Me</a>


    </div>      
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
    <script>

        function doSomthing(){
            aMessage = message;
            console.log(this);
            console.log(aMessage);
        }

        $('a').on('click', doSomthing)
    </script>

当用户点击锚标记并运行doSomthing函数时,查看上面的代码。

然而,我不明白为什么,如果代码更改为以下(将括号添加到doSomthing),doSomthing函数会立即运行而不会单击锚标记。

$('a').on('click', doSomthing())

此外,如果我想在点击时运行doSomthing时传递参数,会发生什么。例如

<div id="container">

        <a href="#">Click Me</a>


    </div>      
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
    <script>

        function doSomthing(message){
            console.log(this);
            console.log(message);
        }

        $('a').on('click', doSomthing('face bash'))
    </script>

我通常期望在点击锚标记之后控制台会记录'this'和传递的字符串,但是doSomthing函数会在页面加载时运行,而不是在单击锚标记时运行:小号

如何正常地将参数传递给通过其他函数调用的函数:S?

2 个答案:

答案 0 :(得分:3)

也许试试

$('a').on('click', function(){
    doSomthing('face bash');
})

答案 1 :(得分:0)

您需要从函数返回一个新函数:

    function doSomthing(message) {
        return function() {
            console.log(this);
            console.log(message);
        };
    }

由于您将调用doSomthing的结果传递给.click,因此结果必须是undefined以外的函数。

$('a').on('click', doSomthing('face bash'))

保持原样。

或者你可以让doSomthing保持正确,proxy(Currying仍未记录,需要jQuery 1.6+)它:

 $('a').on('click', $.proxy(doSomthing, null, "face bash"))