0

我有一个带有按钮的 jquery 对话框(我的按钮,而不是对话框按钮之一)。

设置对话框后,我有以下代码:

$('#bar').click(foo('baz'));

当我加载页面并显示对话框时,运行 foo(不按#bar)。

如果代码是:

$('#bar').click(foo);

或者

$('#bar').click(function(){foo('baz')});

foo 没有运行。

这是为什么?指点我应该RTFM的地方,感激不尽。

只是为了澄清:为什么 foo 在没有按下按钮的情况下在第一个实例中运行(即在对话框初始化时)并且 foo 在后两个示例中没有运行。

哦,我想我刚刚解决了。

1. foo 的结果被传递给 click。在 2. 我仍然不确定。3. anon函数被传递给click。

4

1 回答 1

3

这不会等待点击调用foo

$('#bar').click(foo('baz'));

foo('baz')在执行此行时执行,而不是在用户单击时执行#bar

这不会将参数传递给foo

$('#bar').click(foo);

这可能是您需要的(除非foo构建并返回一个函数,我猜它没有):

$('#bar').click(function(){foo('baz')});

它不起作用的事实可能bar是找不到带有 id 的元素,或者您没有单击它。


详细解释:

当你执行

foo(bar); 

foo用参数执行bar

文你执行

a = foo;

你给变量avalue foo,它可能是一个函数,也可能不是一个函数。

你打电话时

var a = function() {foo(bar)};

您创建一个新的匿名函数,该函数foo(bar)在调用时执行,并将这个新函数作为变量的值a

当你执行

$('#bar').click(function(){foo('baz')});

您传递一个新函数,在调用foo('baz')时调用,作为$('#bar').click(. 当您单击具有 id 的元素时,JQuery 会调用此函数bar

于 2013-01-12T11:42:23.633 回答