-4

Let's say I have the following situation:

<a href="#" id="trigger">CLICK ME</a>

and

  var x = alert("test");
  $('#trigger').click(function() {
      x
  });

Why is x firing on loading the page, and not while pressing the button? I know when placing the variable into the function it works, but I don't really get why!

4

4 回答 4

3
var x = alert("test");

这将执行alert("test"),然后将该表达式的值分配给x。(alert不返回任何内容,因此x将设置为undefined.)

相反,请使用以下代码:

var x = function() {
    alert("test");
}
$('#trigger').click(function() {
    x(); //remember to actually call it!
});

这里有一些更好的方法:

$('#trigger').click(x); //no need to wrap in function if it does not have
                        //any arguments
$('#trigger').on('click', x); //using on
于 2013-05-27T14:52:19.570 回答
1

在这一行

var x = alert("test");

您实际上调用了该函数并将其返回值放入变量 x 中。Asalert()没有返回值,除了undefined没有真正存储在x.

这就是为什么下次访问x它时它仍然是空的并且不包含指向函数或类似内容的指针!

于 2013-05-27T14:53:17.010 回答
1

var x = alert("test");将立即调用该函数alert("test"),然后将返回值分配给x.

要获得您想要的行为,您可以将 alert 调用包装在一个函数中:

var x = function() {
    alert("test");
}

然后稍后调用它,使用括号(参数列表):

$('#trigger').click(function() {
      x();
});
于 2013-05-27T14:53:42.163 回答
0

因为alert("test")是一个将显示警报消息的功能。由于您不在该$('#trigger')区域调用此函数,因此它与触发器的单击功能无关,但会在您的浏览器执行脚本部分后立即执行。

于 2013-05-27T14:53:31.950 回答