我目前正在定义变量号。像这样的jquery对话框的按钮
var buttonNames = buttonNamesString.split("|");
var buttonsOpts = {};
for (i = 0; i < buttonNames.length; i++) {
buttonsOpts[buttonNames[i]] = function() { $(this).dialog("close");__doPostBack(postbackControlID, buttonNames[i]);}
}
并像这样初始化对话框。 (注意行按钮:buttonsOpts。这就是我如何传递按钮的变量编号)
var parentElement = popupControl.parent();
popupControl.dialog({
autoOpen: false,
modal: true,
buttons: buttonsOpts,
hide: "explode",
open:function(type, data){
$(this).parent().appendTo(parentElement);
popupControl.css({visibility: "visible"});
}
});
问题是当单击对话框中的按钮时,buttonNames [i]在行中没有返回任何内容,因为我已经增加到其最大值。
function(){$(this).dialog(“close”); __ doPostBack(postbackControlID,buttonNames [i]);}
我们可以在Javascript中访问从事件代码内部触发事件的对象,就像我们在.Net事件中使用sender对象一样。这将解决问题。
我怎样才能克服这一点?提前谢谢。
答案 0 :(得分:1)
问题是你在循环迭代变量上使用闭包。这应该通过改变索引的范围来解决它。
for (i = 0; i < buttonNames.length; i++) {
var index = i;
buttonsOpts[buttonNames[index]] = function() { $(this).dialog("close");__doPostBack(postbackControlID, buttonNames[index]);}
}
您的问题的答案越长,您生成的函数都引用相同的数字变量i
。因此,在循环结束时,所有函数都设置为buttonNames.length。由于buttonNames [buttonNames.length]中定义的数组中没有按钮,因此您获得undefined
。
注意:buttonOpts[buttonNames[index]]
处的临时变量不是必需的,只是为了保持一致