Rails Forms: изменить поля формы из ранее выбранных полей

0

У меня есть два поля simple_form:

<%= f.input :ration_card ,as: :radio_buttons,collection: ["Yes","No"], input_html: {id: "rationcard"} %>
<%= f.input :rationcardNum , label: "Ration Card No." ,input_html: {id: "rationcard_no"} %>  

Я хочу показать второе поле, только если пользователь выбирает "Да" для первого поля. Мой JQuery:

$(function(){
    $("#rationcard").change(function(){
        if ($("#rationcard").val()=="Yes"){
            $("#rationcard_no").show();
        } else {
            $("#rationcard_no").hide();
        }
    })
})  

Я вижу, что файл js включен в начало страницы.

сгенерированный HTML:

<div class="control-group radio_buttons optional family_ration_card">
 <label class="radio_buttons optional control-label" for="rationcard">Ration card</label>
  <div class="controls">
   <label class="radio">
    <input id="rationcard" class="radio_buttons optional" type="radio" value="Yes" name="family[ration_card]" checked="checked">
Yes
   </label>
  <label class="radio">
   <input id="rationcard" class="radio_buttons optional" type="radio" value="No" name="family[ration_card]">
No
  </label>
 </div>
</div>  

<div class="control-group string optional family_rationcardNum">
 <label class="string optional control-label" for="rationcard_no">Ration Card No.</label>
  <div class="controls">
   <input id="rationcard_no" class="string optional" type="text" value="DGFR12" size="50" name="family[rationcardNum]">
  </div>
</div>

Но динамические поля не работают. Что здесь не так?

Или предложите лучший способ достичь этого.

Теги:
dynamicform
simple-form

1 ответ

1
Лучший ответ

В первую очередь вы не можете поместить идентификатор на входы, потому что в итоге вы получите два входа с одинаковыми, и jQuery найдет только первый. Во-вторых, вам нужно использовать $ (this) внутри вашего обработчика.

Вам нужна строка в строке:

<%= f.input :ration_card ,as: :radio_buttons,collection: ["Yes","No"], wrapper_html: {id: "rationcard"} %>
<%= f.input :rationcardNum , label: "Ration Card No." ,wrapper_html: {id: "rationcard_no"} %>

$(function(){
    var toggle_rationcardNum = function(visible) {
        if (visible){
            $("#rationcard_no").show();
        } else {
            $("#rationcard_no").hide();
        }
    }

    $("#rationcard input").change(function(){
        toggle_rationcardNum($(this).val()=="Yes")
    })

    toggle_rationcardNum($("#rationcard input:checked").val()=="Yes")
})();  
  • 0
    Это нормально работает, но скрывает только входные данные второго поля, а не метку. Добавлен wrapper_html в оба поля. Также я хотел бы знать, что это за wrapper_html ?
  • 2
    input_html - это все html-параметры, которые будут размещены на входах, wrapper_html - это html-параметр на wrapper - div, в который помещаются эти входные данные.
Показать ещё 8 комментариев

Ещё вопросы

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