выберите и onChange в форме Ruby on Rails

Я просмотрел все вопросы и ответы SO по этой теме, но я все еще не могу заставить свой сценарий работать. Я хочу вызвать действие кнопки щелчка, когда выбрана опция раскрывающегося меню ; кажется простым и должно быть очень распространено с AJAX.

вот соответствующие выдержки из моего кода:

<%= form_for(@test, :html => {:id => "form_id", :name => "MyForm", :remote => "true"}) do |form| %>
    <%= form.label "Menu1" %>
    <%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], :html_options=>{:onChange=>"javascript: this.form.apply_button_name.click();"}) %>

    <!-- more select menus and text fields here -->

    <div class="actions">
        <%= form.submit "Apply", :name => "apply_button_name", :remote => "true" %>
    </div>
<% end %>

я использовал": remote = > "true" как для формы, так и для кнопки, потому что это единственный способ заставить AJAX работать. Я также пробовал С и без явных " html_options" и " javascript:", после того, как я просмотрел некоторые ответы, которые предлагали, но это не помогло. Я также попробовал onSelect и onClick вместо onChange, но все равно не повезло.

сгенерированный HTML выглядит следующим образом:

    Menu1
    <select id="test_Menu1" name="test[Menu1]"><option value="value1">Option1</option>
<option value="value2" selected="selected">Option2</option></select>

Как вы можете видеть, в HTML-коде нет обработчика событий onChange; почему? Кто видит, что я делаю не так?

Спасибо за любую помощь.

2 ответов


измените вызов на form.select, например:

<%= form.select :Menu1, [["Option1","value1"],["Option2","value2"]], {}, 
                :onChange=>"javascript: this.form.apply_button_name.click();" %>

Если вы изучите документацию:

API Dock Ruby on Rails выберите

вы увидите, что помощник select form принимает форму:

select (object, method, choices, options = {}, html_options = {})

Если вы ничего не передаете для хэша опции (в вашем случае это будет пустой хэш), форма думает, что ваш хэш html_options-это ваш хэш опций, и запутывается.

способ проверить это добавить что-то вроде {:onchange=> "alert('Hello');"} и либо посмотреть, успешно ли событие запускается, либо, в качестве альтернативы, на вашей фактической веб-странице щелкните правой кнопкой мыши на элементе select и проверьте его. Если в html нет опции onchange, это означает, что помощник формы rails действительно путает html_options с другими параметрами. Итак, что вы должны иметь:

<%= form.select (:Menu1, [["Option1","value1"],["Option2","value2"]], {}, {:onChange=>"handler();"} %>

ОБЯЗАТЕЛЬНО ВКЛЮЧИТЕ ПУСТОЙ ХЭШ ДЛЯ ПАРАМЕТРОВ ПЕРЕД ПАРАМЕТРАМИ HTML, И ВЫ ДОЛЖНЫ БЫТЬ ШТРАФ. Я не думаю, что вам даже нужно иметь html_options и javascript, которые у вас есть.

наконец, если onChange не работает, попробуйте использовать onchange без капитала C.