0

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
     });

上記のコードの問題は、チェック ボックスがクリックされても、最後のコンボ ボックスだけがアクティブになることです。

チェック ボックスには ID (user1,user2,user3....) があり、コンボ ボックスには ID usersel1,usersel2.... があります。

4

1 に答える 1

1

いくつかの問題があります。

まず、forサイクルはブロック全体ではなく、2 行目にのみ適用されます。

第二に、クロージャの作成方法が間違っています (こちらを参照)。ご想像のとおり、値 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 に答える