将jQuery事件作为变量传递

时间:2009-02-25 21:20:39

标签: javascript jquery

您可以使用JavaScript执行此操作:

function bar(test) {
    alert(test);
}
var foo = bar;
foo('hi');

我希望能够用jQuery事件做类似的事情:

var foo = $('#bork').click;
foo(function() { alert('I was just clicked.'); });

但是,当页面加载时出现错误:this.bind is not a function。我在这里做的事情有问题吗?是否有更好的方法来获得相同的效果?

5 个答案:

答案 0 :(得分:4)

其他答案似乎没有解决技术问题:

为什么这样做:

$('#bork').click(function() { alert('I was just clicked.'); });

但不是这样:

var foo = $('#bork').click;
foo(function() { alert('I was just clicked.'); });

这两个似乎是相同的,但问题是this函数的实现中的“click”引用了第一个示例中的jQuery对象,但它引用了{{ 1}}在第二个例子中。由于您尚未定义foo,因此foo.bind实施中对“this.bind”的调用失败。

这是a great article about the ins and outs of binding/scoping in Javascript

答案 1 :(得分:1)

$('#bork').bind('click', foo);
function foo() { alert('i was just clicked'); }

答案 2 :(得分:0)

我认为您正在寻找bind功能。

$('#bork').bind("click", function() { 
    alert('I was just clicked.'); 
});

答案 3 :(得分:0)

尝试以下方法:

$("#bork").bind("click", function() { alert("I was just clicked"); });

答案 4 :(得分:0)

您需要将foo定义为使样本正常工作的函数。如果你稍微改变foo的定义它将起作用:

var foo = function(f) {$('#bork').click(f);};
foo(function() { alert('I was just clicked.'); });