Javascript 使用google闭包从复选框激活组合框

Javascript 使用google闭包从复选框激活组合框,javascript,google-closure-compiler,google-closure,google-closure-library,Javascript,Google Closure Compiler,Google Closure,Google Closure Library,在对话框中,我有一组Id为user1、user2等的复选框,还有一组Id为usersel1、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)

在对话框中,我有一组Id为user1、user2等的复选框,还有一组Id为usersel1、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
     });

对于(var g=0;g有两个问题

首先,
循环的
仅应用于第二行,而不是整个块

第二,创建闭包的方法是错误的(请参阅)。值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;
  }
}

用于(var g=0;g工作得非常好!!!!!当复选框未选中时,组合框需要禁用,因此我们是否应该添加另一个侦听器?另一个问题是,仅当脚本第一次加载时,侦听函数才起作用;第二次调用对话框时,没有重新加载侦听函数,侦听函数不起作用。第一个问题。您可以在同一个事件处理程序中处理此问题,无需添加其他侦听器。您只需检查复选框的状态,然后根据它启用或禁用select元素。第二个问题。当您运行此脚本时,它会将事件处理程序添加到所有现有元素中。如果以后添加更多元素,显然需要添加事件处理程序r这些也可以。第一个任务可以这样做:
element.disabled=!e.currentTarget.checked;
第二个问题:当我单击按钮时,我会得到对话框。当我第一次这样做时,侦听器事件工作,从第二次单击按钮时开始(无需重新加载)如果您想在JSBin-example中托管代码,那么就不需要了