выберите и onChange в форме Ruby on Rails - PullRequest
8 голосов
/ 01 января 2012

Я просмотрел все ТАК вопросы и ответы по этой теме, но все еще не могу заставить свой сценарий работать. Я хочу вызвать действие кнопки нажатия, когда выбрана опция выпадающего меню; кажется простым и должен быть очень распространенным с 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 ]

15 голосов
/ 01 января 2012

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

<%= form.select :Menu1, [["Option1","value1"],["Option2","value2"]], {}, 
                :onChange=>"javascript: this.form.apply_button_name.click();" %>
5 голосов
/ 30 сентября 2014

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

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

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

select (объект, метод, выбор, опции = {}, html_options = {})

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

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

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

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

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

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