2014-06-26 57 views
0

好吧,下面是我們假設的情況發生:
我有3個選擇標記,
當你選擇第一個選項,
第二個基於結果填入第一個,
當您在第二個中選擇一個選項
第三個根據第二個填充結果。jQuery的綁定平變化到3個選擇標籤,AJAX源

這裏到底發生了什麼: 當您選擇在第一選擇標籤選項,第三個嘗試與第二個之前的結果來填充,這裏是我的代碼(我簡化演示的原因代碼):http://jsfiddle.net/snoapps/cSGBM/1/

HTML:

<select id="chooser1" data-bind-onload="true"></select> 
<select id="chooser2" data-bind-onload="false" data-bind-target="#chooser1"></select> 
<select id="chooser3" data-bind-onload="false" data-bind-target="#chooser2"></select> 

的javascript:

$(document).ready(function() { 
$("select[data-bind-onload]").each(function() { 
     bindonload = $(this).data("bind-onload"); 
     // The first chooser loads automatically 
     if (bindonload === true) { 
      $bind = $(this); 
      // This is just to fill it with test data 
      for (i=0; i<5; i++) { 
       $op = $("<option></option>"); 
       $op.val(i); 
       $op.html("select "+i); 
       $bind.append($op); 
      } 
     } else { 
      // This is where I bind the 2nd and 3rd select's to their previous select onchanges 
      $sel = $(this); 
      bt = $(this).data("bind-target"); 
      if (bt !== undefined) { 
       $("select"+bt).on("change",function() { 
        $val = $(this).val(); 
        // Again, this would normally be ajax, but test data is given for demo purposes 
        for (i=0; i<5; i++) { 
         $op = $("<option></option>"); 
         $op.val(i); 
         $op.html($val+" select "+i); 
         $sel.append($op); 
        } 
       }); 
      } else { 
       console.error("Invalid binder construction"); 
      } 
     } 
    }); 
}); 

第二標記應與DAT被填充一個在第三個之前,我想也許第三個選擇覆蓋第二個綁定函數?

回答

0

這似乎是一個範圍問題。

看到這個updated JSFiddle

的問題是,你宣佈$ SEL,並綁定到它,但後來重新定義$ SEL這樣的綁定是選擇最後一個。使用這個來代替:

var $sel = $(this); 

如果你有5個選擇,最後一個將當第一個變化和中間3將被忽略更改。通過使用var $sel你基本上爲每個選擇做一個新的變量,而不是你重新分配的一個變量。

這是由於$sel = 1將同一個$ sel變量重置爲新值,因此所有先前的引用都「更新」,使用var $sel = 1您正在創建該變量的另一個實例。

可能有更好的方法來處理這個問題,但是這會解決你當前的代碼。