Javascript 将函数绑定到其他作用域上的onClick
我正在尝试将一个函数绑定到锚点“onclick”属性。我没有使用传统jQuery的bind/live/on/which,因为我有一些其他脚本阻止事件传播(我知道这很糟糕) 要将函数绑定到“onclick”属性,我将向如下模块传递一个JSON对象:Javascript 将函数绑定到其他作用域上的onClick,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我正在尝试将一个函数绑定到锚点“onclick”属性。我没有使用传统jQuery的bind/live/on/which,因为我有一些其他脚本阻止事件传播(我知道这很糟糕) 要将函数绑定到“onclick”属性,我将向如下模块传递一个JSON对象: function foo() { alert('foo') } $('document').ready(function() { var options = { opt1: 'fooID', opt2: '
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);
});
var $link = $('<a></a>',{
href : link,
title : actions[i].text,
'class' : cssClass,
text : 'foo',
click : actions[i].onclick
})
return $link;
$link[0].onclick = options.actions[i].onClick;
如您所见,名为“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();
};
var buildLinks=function(objectID)
{
var linksNbr=actions.length;
var-link,cssClass;
对于(变量i=0;i
问题是,正如您所期望的,当脚本被解析时,只在那里执行'foo'。“onclick”在之后甚至不起作用
我可以按如下方式传递它:单击“foo()”。onclick可以工作,但它也在解析时执行,在我看来,它非常难看
我希望仍然能够像这样传递它,但工作正常(即加载时不执行,但仅在单击时执行)
不幸的是,它必须与jQuery1.4.4配合使用
.html()
.attr('onclick',…)
,使用.prop
,甚至只使用element.onclick=…
$link=$(“”{
href:link,
标题:行动[i]。正文,
“类”:cssClass,
文本:“foo”
}).prop('onclick',actions[i].onclick);
我会这样做:
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);
});
var $link = $('<a></a>',{
href : link,
title : actions[i].text,
'class' : cssClass,
text : 'foo',
click : actions[i].onclick
})
return $link;
$link[0].onclick = options.actions[i].onClick;
var$link=$(',)函数插入节点,即包含事件的html
对于传播问题,我会这样做:
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);
});
var $link = $('<a></a>',{
href : link,
title : actions[i].text,
'class' : cssClass,
text : 'foo',
click : actions[i].onclick
})
return $link;
$link[0].onclick = options.actions[i].onClick;
html
js$('a[href=“#no”]').live('click',function(){return false;})
通过这种方式,每当href指向#no
时,事件最终会传播这里有一个问题。如果这种方法很好,您可以如下设置onclick在jquery的原始元素上,如下所示:
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);
});
var $link = $('<a></a>',{
href : link,
title : actions[i].text,
'class' : cssClass,
text : 'foo',
click : actions[i].onclick
})
return $link;
$link[0].onclick = options.actions[i].onClick;
您好,您可以用一个html来发布这个,我们可以在上面试用吗?或者您可以发布一个提琴吗?在那里编写代码和给您一个解决方案比较容易:)您真的需要传递.html()
,而不仅仅是创建的元素吗?将它作为[actions[i].onClick]()传递如何,由于它们都是a
元素,您可以给它们一个默认类,如linkDelegatorClass
,如果您委派事件,则检查该类。。。在我看来,这似乎是解决这个问题的最有效方法。点击或.on(“点击”)
或.attr('click',ref)
(隐式调用。点击):波普说他不能使用.on
。我注意到他还在序列化元素,而不是传递它,这将破坏将处理程序设置为属性的过程:(他说有东西正在停止传播,在这种情况下,他使用什么并不重要
工作,那么正常的方式也必须工作。onclick工作,而不是我所说的.on/.click/.delegate。我不能使用.prop()
,因为我被jQuery 1.4.4困住了:它工作正常,但我想知道为什么我需要使用原始onclick
属性,以及为什么它不触发“foo”虽然jQueryattr
?我猜jQuery的函数“attr”执行该函数是希望得到一个字符串(因为它需要一个字符串),而上面的示例只声明了对函数的引用。@koskoz:该属性与JavaScript/jQuery的工作方式几乎没有关系或根本没有关系:该属性是DOM元素的属性,而不是JS对象,因此函数JS函数引用不能是html属性,只能将其名称设置为属性。批准的答案集事件处理程序仅在JS中使用,而不是通过设置节点属性,这样您就可以使用函数引用。或者,jQuery提供了.prop
方法,而jQ为您进行绑定。除了插入节点的方式之外,这并不能真正解决任何问题……因为它不使用$link.html()
(应该返回一个带有“foo”btw的字符串)这正是Alnitak和我试图解释的…我想使用user338128或Alnitak答案,但我不能。我没有可用的prop
或live/delegate/on。我一直这么说…我通过使用.append()插入最后的元素来管理它
。我最初使用的是HTML字符串,因为我找不到更好的方法将其插入dhtmlxGridObject的单元格中。现在,我使用的是。append()
而不是字符串click()
。