Javascript JQuery对话框:如何在按钮单击事件中查找单击的按钮

Javascript JQuery对话框:如何在按钮单击事件中查找单击的按钮,javascript,jquery,jquery-ui,jquery-dialog,Javascript,Jquery,Jquery Ui,Jquery Dialog,我目前正在为jquery对话框定义一个可变数量的按钮,如下所示 var buttonNames = buttonNamesString.split("|"); var buttonsOpts = {}; for (i = 0; i < buttonNames.length; i++) { buttonsOpts[buttonNames[i]] = function() { $(this).dialog("close");__doPostBack(pos

我目前正在为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]);}
    }
问题是,当单击对话框中的按钮时,buttonNames[i]在行中不返回任何内容,因为i已增加到其最大值

函数(){$(this.dialog(“close”)uu doPostBack(postbackControlID,buttonNames[i])}

我们可以像使用.Net事件中的发送者对象一样,从Javascript中的事件代码内部访问触发事件的对象吗。那将解决这个问题


我怎样才能克服这个问题?提前感谢。

问题是您正在循环迭代变量上使用闭包。这应该通过改变索引的范围来解决

for (i = 0; i < buttonNames.length; i++) {
       var index = i;
       buttonsOpts[buttonNames[index]] = function() { $(this).dialog("close");__doPostBack(postbackControlID, buttonNames[index]);}
    }
for(i=0;i
对于您的问题,较长的答案是您正在生成的函数都引用相同的数字变量,
i
。因此,在循环结束时,所有函数都设置为buttonNames.length。由于在buttonNames[buttonNames.length]定义的数组中没有按钮,因此将得到
未定义的

注意:
buttonOpts[buttonNames[index]]
处的temp变量不是必需的,只是为了保持一致性

for (i = 0; i < buttonNames.length; i++) {
       var index = i;
       buttonsOpts[buttonNames[index]] = function() { $(this).dialog("close");__doPostBack(postbackControlID, buttonNames[index]);}
    }