выберите и 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.