你所面臨的問題時,因爲你正在使用的ID爲您的選擇。 ID 必須在頁面中是唯一的,否則會遇到麻煩。如果你使用一個id克隆一個select,這個id也會被克隆,從而產生一個無效的文檔。
Have a look at the example I created on JsBin
標記:
<tr class="user_restriction">
<td>
<select name="table[]" class="userselect">
<option value="" selected>---</option>
<option value="members">Members</option>
<option value="staff_positions">Staff Positions</option>
</select>
</td>
<!-- and so on, basically just changed ids to classes -->
</tr>
我改變了所有的ID,以類和改變的變化處理程序,因爲這是你的第二個問題。
事件處理程序將綁定到所選元素,而不是之後添加的元素。對於事件委派,這是一個正確的用例,當處理程序綁定到父項並在本示例中捕獲來自子選擇元素的更改事件時,無論它何時添加到DOM。
使用jQuery,這是一種方式來實現這一目標:
$('table.table').on('change', '.userselect', function() {
var activeRow = $(this).parents('tr');
activeRow.find('td').eq(1).find('select').hide();
if(this.value.length === 0){
activeRow.find('td').eq(1).find('select').eq(0).show();
}else{
activeRow.find("." + this.value).show();
}
});
處理程序綁定到你的table
- 元素,.userselect
是I類添加到第一選擇一排。因此,稍後添加的元素的每個更改都將被處理。在處理程序中,我將行爲更改爲僅影響實際的表格行,而不是整個表格。
當你克隆行時,你也克隆了必須唯一的ID。 – j08691 2013-02-21 18:26:28