2012-02-24 66 views
0

我已經把我的頭髮拉出這一個..我明白這可能是錯誤的方法..但我的手有點束縛..請做提供任何建議,但。雖然循環問題 - JavaScript的 - jQuery。克隆()

希望這足以說明問題..

慾望 - 選擇「控制行」操縱的「受控行」

問題的選擇 - 如果我做的只是一個while循環最後一列工程(控制上排)

我知道我可以分開,而不是循環手工代碼的每一列,但希望這個組件化,並保持它的小..

預先感謝您!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    <head> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     <meta http-equiv="Content-Language" content="en-us" /> 
     <title>Selects Duplicated</title> 
     <script src="http://code.jquery.com/jquery-latest.js"></script> 
     <script> 
     $(document).ready(function(){ //runs when document.ready 
      var $superduper; 
       i=0; 
       $Tbl_1 = "Tbl"; 

       while (i<=2) 
       { 
        FltTbl = "#flt" + i + "_" + $Tbl_1; 
        FltTbl2 = "flt" + i + "_" + $Tbl_1 + "_" +"2"; 
        ColContainer = "colcontainer" + i; 

        $((FltTbl)).clone().attr('id', (FltTbl2)).attr('class', (FltTbl2)).appendTo("#" + (ColContainer)).find('select > option:selected').each(function() {}); 
        $(function() { 
        $("#" + (FltTbl2)).change(function() { 
        $((FltTbl)).val($(this).val()).trigger('change'); //this triggers when clone select changes // 
        }); 
        }); 
        i++; 
       } 
     }); 

     </script> 

    </head> 

    <body> 
    <table id="Tbl0_2"> 
     <tr> 
      <td width="70"> 
       <div> 
        <select id="flt0_Tbl" class="flt0_Tbl"> 
         <option value="">--</option> 
         <option value="1-1">1-1</option> 
         <option value="1-2">1-2</option> 
         <option value="1-3">1-3</option> 
         <option value="1-4">1-4</option> 
        </select> 
       </div> 
      </td> 
      <td width="70"> 
       <div> 
        <select id="flt1_Tbl" class="flt1_Tbl"> 
         <option value="">--</option> 
         <option value="2-1">2-1</option> 
         <option value="2-2">2-2</option> 
         <option value="2-3">2-3</option> 
         <option value="2-4">2-4</option> 
        </select> 
       </div> 
      </td> 
      <td width="70"> 
       <div> 
        <select id="flt2_Tbl" class="flt2_Tbl"> 
         <option value="">--</option> 
         <option value="3-1">3-1</option> 
         <option value="3-2">3-2</option> 
         <option value="3-3">3-3</option> 
         <option value="3-4">3-4</option> 
        </select> 
       </div> 
      </td> 
      <td> 
      <div>Controlled Row</div> 
      </td> 
     </tr> 
     <tr> 
      <td width="70"><div class="colcontainer0" id="colcontainer0"></div></td> 
      <td width="70"><div class="colcontainer1" id="colcontainer1"></div></td> 
      <td width="70"><div class="colcontainer2" id="colcontainer2"></div></td> 
      <td><div>Controlling Row</div></td> 
     </tr> 
     <tr> 
      <td width="70"><div>Nope</div></td> 
      <td width="70"><div>Nope</div></td> 
      <td width="70"><div>Works</div></td> 
     </tr> 
    </table> 
    </body> 
    </html> 

鏈接:http://jsfiddle.net/EpicVision/x9ASj/

回答

1

的問題是觸發改變使用來自環路是在封閉的選擇,這樣的選擇總是會受到的倒數第三個選擇框循環,因此將在用戶點擊某些內容時成爲第三個選擇器。

我已經更新了你的小提琴http://jsfiddle.net/steveukx/x9ASj/1/以顯示如何創建一個閉包來修復選擇器的值。

(值得注意的是,在循環中創建閉包通常被認爲是不好的做法)。

+0

你ROCK史蒂夫!謝謝!是否有另一種方法來實現相同?這有什麼風險? - 再次感謝! – CodeCore 2012-02-24 08:07:01