我正在尝试将一个函数绑定到锚"onclick“属性。我没有使用传统的jQuery的bind/live/on/任何东西,因为我有一些其他的脚本来停止事件传播(我知道这很糟糕)。
为了将函数绑定到"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一起工作。
发布于 2012-08-06 08:44:05
我会这样做:
var $link = $('<a></a>',{
href : link,
title : actions[i].text,
'class' : cssClass,
text : 'foo',
click : actions[i].onclick
})
return $link;
然后使用这些(1,2)函数中的一个来插入节点,即带有事件的html。
对于传播问题,我会这样做:
超文本标记语言<a href="#no" ....>text</a>
js $('a[href="#no"]').live('click',function(){ return false; });
这样,每当href指向#no
时,最终都会传播事件
发布于 2012-08-06 08:38:10
如果可能的话,返回元素,而不是它的.html()
.attr('onclick', ...)
,使用.prop
,甚至只使用
例如:
$link = $('<a>', {
href: link,
title: actions[i].text,
'class': cssClass,
text: 'foo'
}).prop('onclick', actions[i].onClick);
发布于 2012-08-06 09:02:22
这是一个fiddle snippet。如果这种方法可以,您可以在jquery的原始元素上设置onclick,如下所示:
$link[0].onclick = options.actions[i].onClick;
https://stackoverflow.com/questions/11824878
复制相似问题