Флажки явно отказывают в предоставлении информации по клику - ПОМОЩЬ - PullRequest
0 голосов
/ 20 января 2010

Привет, это мой второй пост (и вторая неделя программирования, когда-либо), поэтому заранее извиняюсь.

У меня есть список флажков, которые представляют различные поисковые фильтры, которые я хочу передать в параметры. Например, если бы это был поиск в ресторане, я бы хотел, чтобы мои пользователи могли отмечать различные типы кухни, которые им интересны. Так же, как Yelp.

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

Могу ли я сделать это с помощью наблюдаемой формы, даже если я не использую AJAX? Могу ли я использовать JavaScript? Я видел материал о «обработчиках событий», но я понятия не имею, что это такое. Ненавижу сдаваться и спрашивать, но я работаю уже 19 часов и больше не могу справиться. Спасибо!

КОД: (ОБНОВЛЕНО ДЛЯ ТИПО)

      <div id="cuisine_form_div">
  <% form_tag(hotels_path, :method => "GET", :id => :cuisine_form ) do %> 
  <%= check_box_tag('my_cuisine[]', 'Mexican', :onclick => "document.cuisine_form.submit();" ) %>
  <%= label_tag(:my_cuisine, "Mexican", :onclick => "document.cuisine_form.submit();" ) %>
  <%= check_box_tag('my_cuisine[]', 'Delis') %>
  <%= label_tag(:my_cuisine, "Delis") %>
  <%= submit_tag 'update' %>
  <% end %>
  </div><!--end.id="cuisine_form_div"-->

Обратите внимание, что всякий раз, когда я вставляю javascript, как указано выше, он предварительно проверяет поле на экране, но не передает никакой информации в URL. Если я нажимаю кнопку «Отправить», все работает отлично, но «по щелчку» я не могу получить URL для бюджета.

Ответы [ 2 ]

0 голосов
/ 21 января 2010

Множество ошибок, но теперь оно работает в моем тестовом приложении! :)

Эти пункты отсутствовали / сломаны

  • Форме нужно id, чтобы найти ее в Javascript
  • check_box_tag нужен третий параметр для установки выбранного состояния (и четвертый (ваш третий) - добавить HTML-код)
  • Используйте onchange, поэтому не имеет значения, нажимает ли пользователь флажок или ярлык
  • Добавьте правильный идентификатор в флажок, чтобы к нему была прикреплена метка
  • Исправить метку в соответствии с предыдущими обновлениями / исправлениями

Полученная форма становится более похожей на:

<% form_tag(cuisine_path, :method => "GET", :id => :cuisine_form, :name => :cuisine_form ) do %>
  <%= check_box_tag('my_cuisine[]', 'Mexican', true, { :id => :cuisine_mexican, :onchange => "document.cuisine_form.submit();" }) %>
  <%= label_tag(:cuisine_mexican, "Mexican" ) %>
  <%= check_box_tag('my_cuisine[]', 'Delis', false, { :id => :cuisine_delis, :onchange => "document.cuisine_form.submit();" }) %>
  <%= label_tag(:cuisine_delis, "Delis") %>
  <%= submit_tag 'update' %>
<% end %>
0 голосов
/ 20 января 2010

Я думаю, что вы хотите сделать, чтобы при каждом щелчке вам нужно было проверить состояние флажка. В этот момент вам необходимо прочитать то, что проверено из атрибута ID или VALUE. Затем вы можете предупредить () значение для отладки или использовать console.log, если вы используете Firebug или инструменты разработчика в Chrome.

Кроме того, вы захотите написать функцию для добавления в событие onClick вместо того, чтобы пытаться записать логику внутри события.

начните с создания такой функции, как

function clickCheckbox {
   /* paste your existing onClick logic */
}

и измените его оттуда ...

Если вам нужен точный синтаксис, дайте мне знать.

Я рекомендую использовать jQuery. Добавьте библиотеку jQuery в тег head на всех своих страницах. Это упрощает использование функций для AJAX и прочего.

Вы можете сделать:

$('#CheckboxID').click(function() {
    if($(this).attr('checked')) {
        $(this).attr('checked',false);
    } else {
        $(this).attr('checked',true);
    }
});
...