我想知道,我可以从动态创建的dijit按钮传递参数吗?
function testcallfromDynamicButton (value) {
alert(value);
}
var thisButton = new dijit.form.Button({
label : thelineindex ,
id : "I_del_butt"+thelineindex,
name : "I_del_butt"+thelineindex,
onClick : testcallfromDynamicButton('test')
}).placeAt( thetabletd1 ) ;
好像,这不行,我试着改变这个。它有效!!
function testcallfromDynamicButton () {
alert('test');
}
var thisButton = new dijit.form.Button({
label : thelineindex ,
id : "I_del_butt"+thelineindex,
name : "I_del_butt"+thelineindex,
onClick : testcallfromDynamicButton
}).placeAt( thetabletd1 ) ;
问题是,我想让函数知道,单击了哪个按钮(因为所有按钮都是动态创建的,而按钮id是由indexnumber生成的)所以我需要将按钮本身的id传递给函数。但是通过onClick调用传递参数似乎在Dijit中不起作用。我怎样才能使它发挥作用?
答案 0 :(得分:8)
不用担心,这是一个非常常见的Javascript错误 - 事实上,它与Dojo无关。
onClick需要一个函数对象,但实际上是在执行testcallfromDynamicButton('test')
并将此函数调用的结果赋给它。例如,如果testcallfromDynamicButton
返回“colacat”,那么onClick事件将被赋予该字符串!那显然不是你想要的。
因此,我们需要确保为onClick
提供了一个函数对象,就像在第二个示例中一样。但是我们也希望在执行时给该函数一个参数。执行此操作的方法是将函数调用包装在匿名函数中,如下所示:
var thisButton = new dijit.form.Button({
label : thelineindex ,
id : "I_del_butt"+thelineindex,
name : "I_del_butt"+thelineindex,
onClick : function() {
testcallfromDynamicButton('test');
}
}).placeAt( thetabletd1 ) ;
这样,onClick
获取一个函数对象,并使用参数执行testcallfromDynamicButton
。