Jquery Click-handler不适用于命名函数?

时间:2016-08-31 09:36:48

标签: javascript jquery

我觉得这是你在睡眠不足或咖啡太多之后遇到的问题之一......

我有一个元素

<a id="blah" href="#">somethinghere.com</a>

我定义了一个函数

function test(){
    alert('hi');
};

我尝试将该函数作为点击处理程序(https://jsfiddle.net/8r1rcfuw/30/)附加:

$('#blah').on('click', test());

并加载页面,处理程序立即执行 - 没有任何点击。

但是当我只使用匿名函数作为处理程序(https://jsfiddle.net/8r1rcfuw/36/)时:

$('#blah').on('click', function(){
    alert('hi');
});

一切正常

同时执行(https://jsfiddle.net/8r1rcfuw/39/):

$('#blah').on('click', function(){
    test();
});


function test(){
    alert('hi');
}

似乎工作正常 - 但似乎有点多余。

这感觉就像我以前做过1000次之前的事情 - 是什么给出的?

3 个答案:

答案 0 :(得分:2)

事件处理程序必须是一个函数,并且您将函数的结果传递给它:

$('#blah').on('click', test());

与:

相同
$('#blah').on('click', undefined); //As your funcion doesn't return anything

将其视为函数是一个值,您可以这样做:

var myFunction = function() {
    alert("Hi");
}

function myFunction() {
    alert("hi");
}

然后:

$('#blah').on('click', myFunction); //Without invocation!

或使用匿名函数:

$('#blah').on('click', function() {
    alert("Hi");
});

答案 1 :(得分:0)

您还可以使用函数对象:

var temp=function test() {
  alert('hi');
}
$('#blah').on('click', temp);

答案 2 :(得分:0)

尝试:

$('#blah').on('click', test); // your function name only

Updated Fiddle