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>

但我收到下一个错误:Uncaught TypeError: object is not a function

请帮帮我。

4

3 回答 3

1

我认为您可以更简单地进行操作,而不会混淆父节点的遍历:

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

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

如果您选择默认选项,它也会重新启用选择框。

于 2013-04-10T09:05:19.140 回答
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);
});
于 2013-04-10T09:08:56.643 回答
0

这应该这样做

$("[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

});
于 2013-04-10T08:54:54.280 回答