2013-07-03 49 views
0

我有代碼,這樣參數丟失jQuery中

HTML : 
<table class="display"> 
    <tr> 
    <td style="vertical-align:top;"> 
    <table class="display"> 
     <thead> 
     <tr> 
      <td><label><input type="checkbox" class="menu_3"/> menu 3</label></td> 
     </tr> 
     </thead> 
    </table> 
    <table class="display table-hover"> 
     <tbody> 
      <tr> 
      <td><label><input type="checkbox" class="submenu_3"/> submenu 3</label></td> 
     </tr> 
       <tr> 
      <td><label><input type="checkbox" class="submenu_3"/> submenu 3</label></td> 
     </tr> 
       </tbody> 
    </table> 
    </td> 
</td> 
</tr> 
</table> 
JQUERY 
for(i=1;i<=6;i++){ 
     $(".menu_"+i).change(function(){ 
      $(".submenu_"+i).attr("checked", this.checked); 
     }); 
    } 

我要檢查menu 3 jQuery的,那麼所有submenu 3檢查過, 並不知它不工作,因爲i參數丟失..

我不知道什麼是發生..

幫我傢伙..

+0

發生'change'事件時,'i'將始終等於'6'。你可以使用像Arun這樣的IIFE來解決這個問題,或者你可以省略循環,並使用jQuery來爲你像Adeneo那樣做邏輯。 – Jasper

回答

1

應該

for(i=1;i<=6;i++){ 
    (function(it){ 
     $(".menu_"+it).change(function(){ 
      $(".submenu_"+it).prop("checked", this.checked); 
     }); 
    })(i) 
} 

的問題是封閉的可變i的使用情況,也準備好答案this question

+0

哇,你的偉大..它解決了我的問題..謝謝你 –

1

您可以使用開始與選擇器選擇所有.menu_*元素,然後slice()獲得數選擇相關.submenu_*元素等無需爲一個循環:

$('[class^="menu_"]').on('change', function(){ 
    $(".submenu_" + this.className.slice(-1)).prop("checked", this.checked); 
}); 

FIDDLE

+0

它解決了我的問題..但我不明白它是如何工作的.. –

+0

它綁定一個改變事件處理程序的所有元素,有一個類以'menu_' ,比如'menu_1'或'menu_30000'等,然後獲取最後一個數字並將其添加到'.submenu_'中以選擇正確的元素,這隻適用於具有一個類和一個尾隨號的元素,但這是如何編寫示例代碼,只要您的實際代碼相同,就不會有問題。 – adeneo

+0

是的,我明白了。謝謝你,你太棒了! –