Как я могу получить динамический идентификатор вложенной формы? - PullRequest
0 голосов
/ 25 февраля 2019

Я получил следующий код, который я хочу показать кнопке «Добавить», когда пользователь выбирает тип ОПЦИИ в поле выбора.Это только работает в первый раз, чтобы добавить вопрос.Я знаю проблему, которая заключается в том, что я дал идентификатор в поле выбора, но если я этого не сделаю, как я могу получить динамический идентификатор поля выбора?

    <%= f.fields_for :questions do |question_form| %>

        <%= question_form.text_field :question_text %>
        <%= question_form.select(:question_type, [ 'TEXT', 'OPTIONS', 'UPLOAD' ],{:prompt => 'Select One'},  :id => "my_id", :onchange => "myFunction()") %>
        <%= question_form.link_to_remove "Remove this Question" %>
        <%= question_form.fields_for :options do |option_form| %>
            <%= option_form.text_field :option_text %>
            <%= option_form.link_to_remove "Remove this option" %>
        <% end %>
        <p id = "test" hidden><%= question_form.link_to_add "Add a option", :options %></p>
    <% end %>
    <p><%= f.link_to_add "Add a Question", :questions %></p>
    <p>
        <%= f.submit %>
    </p>
<% end %>

<script>
function myFunction(){
    var e = document.getElementById("my_id");
    var x = e.options[e.selectedIndex].value
    if (x == "OPTIONS"){
            document.getElementById("test").hidden = false;
    }
    else{
        document.getElementById("test").hidden = true;
    }
}
</script>

1 Ответ

0 голосов
/ 25 февраля 2019

Хотя я не совсем уверен, что вы имеете в виду под «добавление вопроса только в первый раз», похоже, вы уверены, что использование document.getElementById() является проблемой.(Я не знаю, почему это так, но я не знаком с Rails, поэтому я предполагаю, что вы правы.)

Если это так, вы можете избежать этого селектора, используя targetСвойство встроенного в EventListeners параметра "event":

function myFunction(event){
`var x = event.target.options[e.target.selectedIndex].value`
...

(И вы можете сократить это значение до event.target.value.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...