我正在尝试将函数绑定到锚点“onclick”属性。我没有使用传统的 jQuery 的 bind/live/on/whatever,因为我有一些其他脚本停止了事件传播(我知道这很糟糕)。
要将函数绑定到“onclick”属性,我将 JSON 对象传递给这样的模块:
function foo() {
alert('foo')
}
$('document').ready(function() {
var options = {
opt1: 'fooID',
opt2: 'barID',
json: mightyJSON,
actions: [
{ url: 'contact/_id_/edit', text: "Edit", iconPath: 'edit.png' },
{ url: '#', onClick: foo, text: "Delete", iconPath: 'delete.png' }
]
};
var trolol = myModule.configure(options);
});
如您所见,名为“foo”的函数是通过 JSON 的“onClick”属性传递的。函数在对象之上定义。
在“myModule”中,我正在创建这样的锚标记:
var buildLinks = function(objectID)
{
var linksNbr = actions.length;
var link, cssClass;
for (var i = 0; i < linksNbr; i++)
{
// Adding the object ID to the URL
link = actions[i].url.replace('_id_', objectID);
cssClass = actions[i].cssClass || '';
var $link = $(document.createElement('a')).attr('onClick', actions[i].onClick)
.attr('href', link)
.attr('title', actions[i].text)
.addClass(cssClass)
.text('foo');
}
return $link.html();
};
问题是,正如您所期望的那样,'foo' 在脚本被解析时被执行,并且只有在那里。“onclick”之后甚至不起作用。
我可以这样通过onClick: 'foo()'
。onclick 有效,但它也在解析时执行,在我看来,它非常难看。
我希望仍然能够像这样传递它onClick: foo
但工作正常(即在加载时不执行,但仅在单击时执行。
不幸的是,它必须与 jQuery 1.4.4 一起工作。