2012-03-21 93 views
1

我試圖使用下面的代碼將onchange事件綁定到7個下拉菜單。但是當bodysys1改變時,i = 8,因此$('input[id$="bodysys' + i + 'spec"]')[0]未定義。jQuery初始化Onchange事件循環

$(function() { 
    for (var i = 1; i <= 7; i++) { 
     $('select[id$="bodysys' + i + '"]').change(function() { 
      if (this.value == "99") 
       enabletextbox($('input[id$="bodysys' + i + 'spec"]')[0]); 
     }); 
    } 
} 

這顯然不是正確的做法。

回答

6

這就是所謂的最後一個唯一的問題,並用封閉解決:

$(function() { 
    for (var i = 1; i <= 7; i++) { 
     (function (i) { 
      $('select[id$="bodysys' + i + '"]').change(function() { 
       if (this.value == "99") 
        enabletextbox($('input[id$="bodysys' + i + 'spec"]')[0]); 
      }); 
     })(i); 
    } 
} 

它創建了一個新的範疇,所以,當我在原來的範圍發生變化時,它不會在改變舊範圍。

+1

+1 - 這是[簡單測試用例](http://jsfiddle.net/e4ySs/)。 – 2012-03-21 13:08:14

0
$('select[id*="bodysys"]').each(function (index) { 
     $(this).change(function() { 
      if ($("option:selected", this).val() == "99") 
       enabletext($('input[id$="bodysys' + (index + 1) + 'spec"]')[0]); 
     }); 
    }); 

這種方式也有效。