jQuery: несколько полей с одинаковыми именами, но с помощью селектора $ (this)

0

У меня есть несколько флажков:

<div class="abc">
  <%= check_box_tag "closed" %>
  <%= select_tag :time %>
</div>
<div class="abc">
  <%= check_box_tag "closed" %>
  <%= select_tag :time %>
</div>
<div class="abc">
  <%= check_box_tag "closed" %>
  <%= select_tag :time %>
</div>
<div class="abc">
  <%= check_box_tag "closed" %>
  <%= select_tag :time %>
</div>

Они имеют одинаковое имя и id #closed

Как это сделать, когда я нажимаю на флажок (например, последний флажок), он отключит последний select_tag?

Я попробовал что-то вроде этого:

$("#closed", this).change ->
  alert("test")
  $(this).closest(".abc").prop('disabled', true)

Пока это работает, только если я нажму первый флажок в DOM.

благодаря

  • 0
    можете поделиться сгенерированным html
  • 1
    Идентификаторы должны быть уникальными в HTML. они могут иметь одно и то же name . Вы можете использовать класс вместо
Показать ещё 3 комментария
Теги:
checkbox

2 ответа

0

.abc - это <div>. Используйте .next() чтобы найти <select>...

$("#closed", this).change ->
  $(this).next("select").prop('disabled', true)

Как отмечали другие, наличие нескольких элементов с одним и тем же идентификатором является недопустимым HTML. Подумайте об этом.

0

Прежде всего, это не очень хорошая практика использования одного и того же id для нескольких элементов в документе HTML. Но если вы уверены, что checkbox и select всегда находятся на одном уровне в документе, вы можете использовать siblings чтобы получить выбор -

$("#closed", this).change ->
  alert("test")
  $(this).siblings(".abc").prop('disabled', true)

или, может быть

$("#closed", this).change ->
alert("test")
$(this).parent().find(".abc").prop('disabled', true)
  • 0
    closest работает только в том случае, если искомый элемент является предком в дереве DOM, в противном случае - нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню