2013-04-10 69 views
1

我有一個代碼元素:選擇下選擇

<tr> 
    <td> 
    <select class="select_big" name="additional_field" id="<?=$field['id'];?>" required> 
     <option value="0">Выберите значение</option> 
     ... 
    </td> 
</tr> 
<tr> 
    <td> 
    <select class="select_big" name="additional_field" id="<?=$field['id'];?>" required> 
     <option value="0">Выберите значение</option> 
     ... 
    </td> 
</tr> 
<tr> 
    <td> 
    <select class="select_big" name="additional_field" id="<?=$field['id'];?>" required> 
     <option value="0">Выберите значение</option> 
     ... 
    </td> 
</tr> 
<tr> 
    <td> 
    <select class="select_big" name="additional_field" id="<?=$field['id'];?>" required> 
     <option value="0">Выберите значение</option> 
     ... 
    </td> 
</tr> 

當我選擇第二個「中選擇」元素,我需要禁用所有的下一個。 如果我選擇1需要禁用3和4,如果我選擇2我需要僅禁用4. 元素的計數可能不同。

如何獲得下一個選擇的所有元素?

下一個我嘗試:

<script type="text/javascript"> 
    $("[name=additional_field]").change(function(e) { 
    field_data = '#' this.id.replace(/[* .]/g, "\\$&"); 
     $(field_data).parent().parent().nextAll().each(function(i) { 
     console.log($(this)('[name=additional_field]')); 
     }); 
    }); 
</script> 

但是我收到一個錯誤: 遺漏的類型錯誤:對象不是一個函數

請幫助我。

+0

犯的錯誤,如果我改變我1需要阻止3和4 – user2264941 2013-04-10 09:16:30

+0

你更新的要求可以通過@好辦dfsq的解決方案(只需稍作調整即可將索引添加到索引中)。 – nnnnnn 2013-04-10 09:40:25

回答

0

This should do it

$("[name=additional_field]").change(function(e) { 

    var f = $(this).closest('tr')    //find the closest parent tr 
       .nextAll('tr')    //find all tr that follows 
       .find('select.select_big') //from them, get all select 

    //f should be all the selects the follow what changed 

}); 
+0

現在它與類名相關,而不是名稱? 而且你已經完成了幾何級數。 – user2264941 2013-04-10 09:06:25

+0

@ user2264941選擇器是可選的,您可以*修改它們。幾何進展?我只是挑選了接下來的所有內容。 – Joseph 2013-04-10 09:10:56

+0

幾何級數? – nnnnnn 2013-04-10 09:11:10

1

我認爲你可以做到這一點簡單而不混淆父節點的遍歷:

var $sel = $('.select_big').change(function() { 
    $sel.filter(':gt(' + $sel.index(this) + ')').prop('disabled', +$(this).val()); 
}); 

演示:http://jsfiddle.net/VFcF9/

還將重新啓用selectboxes如果選擇默認選項返回。

+1

+1。尼斯。我喜歡你提供的代碼重新啓用選擇元素,如果值改變了,雖然你可能想嘗試這個序列:(1)在第二個下拉列表中選擇非零項; (2)在第一個下拉列表中選擇非零項; (3)在第一個下拉列表中選擇零項。 (當它不應該時,這將重新啓用第三個下拉列表。) – nnnnnn 2013-04-10 09:14:28

+0

@nnnnnn好的,明白了。有趣的bug,謝謝!將嘗試修復它。 – dfsq 2013-04-10 09:17:39

+0

@nnnnnn報告的問題修復http://jsfiddle.net/VFcF9/2/ – dfsq 2013-04-10 09:30:39

1

你得到的錯誤是因爲該行的:

$(this)('[name=additional_field]') 

第一部分,$(this),返回一個jQuery對象,而該對象不是一個函數,所以你不能用更多的括號遵循它。

至於你要求禁用以下所有選擇的元素,也許是:

$("[name=additional_field]").change(function(e) { 
    $(this).closest("tr").nextAll("tr").find("[name=additional_field]").prop("disabled", true); 
}); 
+0

這個塊只有下一個元素 – user2264941 2013-04-10 09:22:06

+1

真的嗎?它[適用於我](http://jsfiddle.net/K8ZNF/),儘管我會建議你在發佈@dfsq時使用一些變化,而不是這樣。 (我會刪除我的答案作爲約瑟夫的複製品,除了我是唯一一個解釋你得到的錯誤的人。) – nnnnnn 2013-04-10 09:26:42

+0

是的,我同意用'+ 1'來解釋錯誤背後的原因。 – andyb 2013-04-10 09:37:34