Как установить и получить идентификатор check_box_tag для функции javascript?

0

У меня есть форма Ruby on Rails 3 с check_box_tags. Как вы устанавливаете идентификатор, а затем получаете значение в функции javascript? Вот check_box_tag

<div class="row" id="device">
  <ul>
    <li><%= check_box_tag 'survey[hardware][]', "IP Phones" %> IP Phones</li>
  </ul>
</div>

Мой javascript

$(document).ready(function() {
$('#device').change(function(){
    if (($('#device').val() == "IP Phone") || ($('#device').val() == "IP PBX Systems"))
    {
        $('#phonepbx').css('display', 'none');
    }
    else
    {
        $('#phonepbx').css('display', 'inline');
    }
});
});

Я не знаю, как установить и получить идентификатор check_box_tag. Я пытаюсь показать или скрыть div id = "phonepbx" в зависимости от того, что они выбирают. Если они выберут одну из первых двух флажков, я хочу показать div #phonepbx. В противном случае держите его скрытым.

спасибо

EDIT Это то, что HTML заканчивается как:

<li><input id="survey_hardware_" name="survey[hardware][]" type="checkbox" value="IP Phones" /> IP Phones</li>

Мне требуется jquery и требуется jquery_ujs. Нужно ли мне что-то еще?

Решение

function checkHardware() {
if ($('#device input:checkbox:eq(0)').is(':checked') || $('#device input:checkbox:eq(1)').is(':checked'))
{
    $('#phonepbx').css('display', 'block');
}
  • 0
    хммм .. jQuery val функция обычно ожидает входной элемент, а не div. Хотя, если вы называете val $('#device').val('some value here') с некоторым значением, вы сохраните это значение в элементе. Из того, что я вижу в вашем коде, это не так.
  • 0
    При вводе идентификатора флажка я получаю нулевое значение в JS. document.getElementById ( '# обзор [оборудование] []'); значение NULL
Показать ещё 1 комментарий
Теги:
ruby-on-rails-3

2 ответа

1
Лучший ответ

В соответствии с вашими инструкциями вы просто проверяете, проверен ли хотя бы один из двух определенных флажков:

$(document).ready(function() {
  $('#device').change(function(event){
    if ($(event.target).filter("input[value='IP Phone']:checked").length ||
      $(event.target).filter("input[value='IP PBX Systems']:checked").length)
    {
        $('#phonepbx').css('display', 'inline');
    }
    else
    {
        $('#phonepbx').css('display', 'none');
    }
  });
});
  • 1
    Кстати, тег checkbox автоматически создается check_box_tag , это первая строка, которую вы предоставляете после вызова этого метода, и она совпадает с именем. Смотрите документы здесь . Таким образом, идентификатор для этого флажка - 'survey[hardware][]'
  • 0
    Результат один и тот же, независимо от того, какой флажок установлен. Это не чтение значения. Кроме того, когда я снимаю флажок, div все еще отображается. У меня есть 4 флажка с разными значениями.
Показать ещё 4 комментария
0

Мне кажется, что вы пытаетесь уловить события checkbox, добавив обработчик изменений в div. Это не идеальное место, чтобы заманить его в ловушку, так как тогда вам нужно искать то, что изменилось. Но, как сказал RustyToms, ваш идентификатор должен быть "осмотром [аппаратным] []", установленным RoR.

$(document).ready(function() {
  $('#survey[hardware][]').on('click', function(){
    (this.checked && this.val().match(/IP Phone|IP PBX Systems/)) ? $('#phonepbx').hide() : $('#phonepbx').show();
  });
});
  • 0
    Я слышал, что клик может быть лучше. У вас есть пример для клика?
  • 0
    Отредактировано для события клика
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню