0

我在对话框中有一组带有 ID 的 user1、user2 等的复选框,还有一组带有 ID 的 user1、usersel2 等的组合框。当一个复选框被选中时(假设 ID 为 user1),则必须激活相应的组合框(即 ID 为 usersel1 的组合框)。我有以下代码并且不工作。我如何实现这种行为?

for(var g=0;g<userlist.length;g++) //userlist.length give no of users
    b2 = (goog.dom.getElement('usersel'+(g+1))); //gets combo box
     //listening if check box is clicked
     goog.events.listen(goog.dom.getElement('user'+(g+1)),
        goog.events.EventType.CLICK,
         function(e) {
         b2.disabled = (false); // trying to enable corresponding combo box
     });

上面这段代码的问题是,任何复选框都被单击,只有最后一个组合框被激活。

复选框有 Ids(user1,user2,user3.... 和组合框有 Ids usersel1,usersel2....

4

1 回答 1

1

有几个问题。

首先,for循环仅适用于第二行,而不适用于整个块。

其次,创建闭包的方式是错误的(见这里)。值 b2 不会像您想象的那样传播到事件处理程序中。

如果像这样重写它会起作用:

for (var g=0;g<userlist.length;g++) { //userlist.length give no of users
  b2 = goog.dom.getElement('usersel'+(g+1)); //gets combo box
  //listening if check box is clicked
  goog.events.listen(goog.dom.getElement('user'+(g+1)), 
    goog.events.EventType.CLICK, 
    makeEventHandler(b2)
  );
}

function makeEventHandler(element) {
  return function(e) {
    element.disabled = false;
  }
}
于 2013-09-11T06:24:10.283 回答