将运行时参数值发送到jQuery的ON方法?

时间:2013-08-29 09:28:46

标签: javascript jquery

我有一个简单的按钮。我需要在点击时将数据发送给处理程序。

所以我使用ON overload method

来获取此代码
.on( events [, data ], handler(eventObject) )

我已创建此示例:

var aaa="john";

function greet(event) { alert("Hello "+event.data.name); }

$("button").on("click", { name: aaa}, greet);

setTimeout(function (){aaa="paul"},2000)

但是等了2秒后,我仍然看到:"Hello John"

所以我假设aaa值在解释时有界。

问题:

如何更改代码,以便在2秒后它会发出警告:Hello Paul

JSBIN

3 个答案:

答案 0 :(得分:4)

一种简单的方法是使用对象文字。您可以将其作为事件数据传递,并保留稍后修改的引用:

var greetData = {
    name: "john"
};

function greet(event)
{
    alert("Hello " + event.data.name);
}

$("button").on("click", greetData, greet);

setTimeout(function() {
    greetData.name = "paul";
}, 2000);

您会找到更新的JS Bin here

答案 1 :(得分:3)

Frédéric Hamidi's answer更好。将此作为替代。

如果您更改它以便传递一个加载名称而不是名称的函数,它将起作用:

var aaa="john";

function getName() {
  return aaa;
}

function greet(event) { alert("Hello "+event.data.name()); }
$("button").on("click", { name: getName}, greet);

setTimeout(function (){aaa="paul";},2000);

http://jsbin.com/ohAJihi/4/edit

答案 2 :(得分:0)

理解你是什么有点令人困惑 试图实现。如果你使用的是setTimeout;没有必要使用按钮onclick处理程序。 其次,setTimeout函数的范围始终是window对象。因此,如果您需要访问对象中的值,请创建它的引用并在setTimeout函数中使用。