2013-05-27 67 views
-4

触发之前发射比方说,我有以下的情况:VAR通过按钮

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

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

为什么x射击加载页面,而不是同时按下按钮?我知道什么时候将变量放入它的函数中,但我真的不明白为什么!

+2

我建议你在MDN上[学习JavaScript](https://developer.mozilla.org/en-US/docs/JavaScript/A_re-introduction_to_JavaScript)来理解哪些功能。 – Ven

+0

真的我不明白为什么有人会downvoting,如果这是一个正常的问题!我想我的js,jquery是好的,它只是我需要记住它! – supersize

+0

你的JS不好。你不知道JS,你只想通过刚刚学习jQuery – Ven

回答

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 
+0

或更好的方式来判断我,'$('#trigger')。得到它了! – Alnitak

+0

感谢您的解释!不要试图用我的 – supersize

1

在这一行

var x = alert("test"); 

你实际上调用函数pu将它的返回值写入变量x中。由于alert()undefined之外没有任何返回值,因此x中没有任何真值。

这就是为什么下一次你访问x它仍然是空的,不是包含一个指向函数或类似的东西!

0

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

1

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

为了得到你想要的行为,你可以用调用一个函数提醒:

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

再到后来调用它,使用括号(参数列表):

$('#trigger').click(function() { 
     x(); 
});