<button id='hello'>Click Me!</button>
$('#hello').click(alert('Hello, World!'));
$('#hello').click(function() {
alert('Hello, World!');
}
我想知道为什么第一个JS代码会在事件加载而不是点击上触发。谁能告诉我为什么脚本正常工作需要function() { [code] }
?
在这个例子中,我使用了jQuery事件,但这并不是特定的,例如,我需要将它与 setTimeout 一起使用。
答案 0 :(得分:12)
click
函数需要另一个函数作为参数。
在第一种情况下,您将传递调用alert('hello world');
的结果,该结果为空。
第二个只是简写:
$('#hello').click(callback);
function callback(){
alert('hello world');
}
答案 1 :(得分:2)
因为.click()
是处理程序。第一个参数是要分配的函数。但是如果你实际上通过参数传递函数,那么它将调用函数(在这种情况下为alert
),然后传递它的返回值。
写$('#hello
)。click(function(){})`基本上是写作的简写:
var myfunction = function() {
// code
};
$('#hello').click( myfunction );
正如您可以看到的那样,它是作为函数的引用而不是函数的返回值传递的。
答案 2 :(得分:2)
你的第一个例子说“评估
警告('你好,世界!')
现在,将结果作为参数传递给click。 “
第二个说“定义一个函数,当我调用它时会发出警报,并将整个函数作为参数传递给点击。
答案 3 :(得分:2)
function() { ... }
语法是在Javascript中声明匿名函数的方式。 jQuery使用大量这些来指定稍后将执行某些操作,就像事件发生时一样。您可以将其视为在必要时延迟执行函数。如果没有这种语法,那么你所放置的任何代码都会被立即评估,这不是你想要的事件处理程序。
您可能会想,“为什么JavaScript不足以了解其中的差异?”考虑一下:
function returnCallback(linkId, data) {
return function(e) {
alert('Clicked on ' + linkId + '. Here is some data: ' + data);
// Maybe do some stuff with e, the event parameter
}
}
$('#some-link').click(returnCallback('some-link', 'some-data'));
$('#other-link').click(returnCallback('other-link', 'different-data'));
这是一个人为的例子,但它说明了匿名函数和闭包的强大功能。这是有效的,因为returnCallback
返回一个函数。
答案 4 :(得分:1)
在第一个实例中,“JavaScript wrong”,您实际上是在加载脚本时调用alert('Hello, World!')
。现在,您将.click
函数传递给函数的原因是因为它可以在任何时候调用它。从本质上讲,当您将代码放入函数中时,您可以随时将代码打包(或根本不运行)。
$('#hello').click(alert('Hello, World!'));
正在尝试运行alert('...')
并将其返回值传递给.click()
函数,该函数将无法正常工作。
答案 5 :(得分:1)
这是因为JavaScript会评估所有内容,在此过程中会调用警报。您可以使用匿名函数,也可以使用自己的自定义函数,如下所示:
<script language="javascript" type="text/javascript">
$("#mybutton").click(clickFired);
function clickFired() {
alert('click fired');
}
</script>
答案 6 :(得分:0)
.click()函数所需的参数是一个Function。因此$(“#hello”)。click(function {[code]});是必须的。因为alert()无法返回任何内容。
答案 7 :(得分:0)
此处的click函数为事件处理程序赋值。
对于第一个(“错误的”)代码,您指定的值alert('Hello, World!')
本身就是一个函数调用,因此它会立即进行评估,因此会出现在加载状态。
使用第二个(“正确”)代码,您现在正在分配一个新的匿名函数,该函数不会自行执行,只是在加载时实例化。因此,这将在以后的预期中发挥作用。
答案 8 :(得分:0)
somefunction(alert('hello!world'));
这意味着你想传递一些函数alert的返回值(“hello!world”)。
jquery click需要一个回调,它应该在单击元素时触发。所以你把它放在一个不执行的函数中,除非有人(这里是jquery)明确地调用它。