Подскажите в чём ошибка

Тема в разделе "JavaScript", создана пользователем TecT, 22 июл 2012.

Модераторы: ZiX
  1. TecT

    TecT Пользователь для ТесТа

    Регистр.:
    25 фев 2009
    Сообщения:
    449
    Симпатии:
    44
    Надо чтоб при выборе "Юридическое лицо" блокировалась кнопка "Да". Подскажите пожалуйста.

    Код:
    $('#person').change(function(){
    var person = $('#person-1 input:checked').val();
    if (person == '1') {
    $('#inval-0').attr('disabled', 'disabled');
    } else {
    $('#inval-0').attr('disabled', false);
    }
    });
    
    HTML:
    <div class="sub" id="person">
    <div><label class="title">Правовой статус страховщика:</label></div>
    <input type="RADIO" id="person-0" name="person" value="0"><label for="person-0">Физическое лицо</label>
    <input type="RADIO" id="person-1" name="person" value="1"><label for="person-1">Юридическое лицо</label>
    </div>
    <div class="sub">
    <div><label class="title">Вы вышли на пенсию или имеете степени инвалидности?</label></div>
    <input type="RADIO" id="inval-0" name="inval" value="1"><label for="inval-0">Да</label>
    <input type="RADIO" id="inval-1" name="inval" value="2"><label for="inval-1">Нет</label>
    </div>
     
  2. recasher2k12

    recasher2k12

    Регистр.:
    19 фев 2012
    Сообщения:
    156
    Симпатии:
    78
    Рабочий код:
    Код:
    $('#person input').change(function(){
    var person = $('input#person-1:checked').val();
    if (person == '1') {
    $('#inval-0').attr('disabled', 'disabled');
    } else {
    $('#inval-0').attr('disabled', false);
    }
    });
    2 ошибки:
    1) $('#person') - указывает на div, у которого нет события change
    2) Неправильно составлен селектор $('#person-1 input:checked').
    После выполнения команды:
    var person = $('input#person-1:checked').val();
    у person может быть два значения:
    1 или undefined
    Можно заменить на
    var person = typeof $('input#person-1:checked') == 'undefined' ? 0 : 1
     
    TecT нравится это.
  3. TecT

    TecT Пользователь для ТесТа

    Регистр.:
    25 фев 2009
    Сообщения:
    449
    Симпатии:
    44
    Спасибо за разъяснение, но вот ещё такой момент.

    Всё работает, но вот в чём проблема, если я нажимаю на юридическое лицо ничего не происходит, но если открыть исходный код то к input добавилось disabled. Но вот если прописываю вместо, attr() button() то всё нормально скрывается всё. Но загвостка в том что button() не принимает такой параметр как checked. Просто хотелось если один вариант скрыт то второй уже сразу активирован.

    Как быть в таком случае?
     
  4. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    у меня вот так работает без проблем:
    PHP:
    $('#person').change(function(){
    if ($(
    '.persone_radio:checked').val() == '1') {
    $(
    '#inval-0').attr('disabled''disabled');
    $(
    '#inval-1').attr('checked''checked');    
    } else {
    $(
    '#inval-0').attr('disabled'false);
    }
    });

     
     
    <div class="sub" id="person">
    <
    div><label class="title">Правовой статус страховщика:</label></div>
    <
    input type="RADIO" id="person-0" class="persone_radio" name="person" value="0"><label for="person-0">Физическое лицо</label>
    <
    input type="RADIO" id="person-1" class="persone_radio" name="person" value="1"><label for="person-1">Юридическое лицо</label>
    </
    div>
    <
    div class="sub">
    <
    div><label class="title">Вы вышли на пенсию или имеете степени инвалидности?</label></div>
    <
    input type="RADIO" id="inval-0" name="inval" value="1"><label for="inval-0">Да</label>
    <
    input type="RADIO" id="inval-1" name="inval" value="2"><label for="inval-1">Нет</label>
    </
    div>
    Посмотреть как работает можно здесь: Перейти по ссылке
     
    TecT нравится это.
  5. TecT

    TecT Пользователь для ТесТа

    Регистр.:
    25 фев 2009
    Сообщения:
    449
    Симпатии:
    44
    dino твой код тоже работает но вот у меня проблема такая же как я описал выше.

    То есть если прописывать через attr() тогда изменения происходят только в исходном коде, а если через button() тогда всё происходит и в исходном коде и визуально тоже. Но проблема в том что у button() можно либо включить либо отключить кнопку, а мне надо чтоб ещё параллельно ставился чебокс.
     
  6. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    А в каком браузере такая фигня происходит? и если можно ссылку на проблемную страницу выложите, так легче разобраться будет, возможно на ней есть ещё какие-то скрипты, перебивающие работу нужного скрипта...
     
  7. TecT

    TecT Пользователь для ТесТа

    Регистр.:
    25 фев 2009
    Сообщения:
    449
    Симпатии:
    44
  8. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    А где на указанном сайте проблемная страница?
    P.S. Нашел нечто подобное при расчете "Путешествий", вот только не увидел там кода обработки радиокнопки "Физ/Юр лицо"...
     
  9. TecT

    TecT Пользователь для ТесТа

    Регистр.:
    25 фев 2009
    Сообщения:
    449
    Симпатии:
    44
    Видимо ты зашёл на ту страницу когда я уже всё подправил и то, если взглянуть то при нажатии на Юр. лицо, отключается кнопка внизу "Да", но не ставится чекед на ответ "Нет".
     
  10. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    ага вижу...
    PHP:
    $('#person').change(function(){
    if ($(
    '.persone_radio:checked').val() == '1') {
    $(
    '#inval-0').button('disable');
    } else {
    $(
    '#inval-0').button('enable');
    }
    });
    а должно быть:
    PHP:
    $('#person').change(function(){
    if ($(
    '.persone_radio:checked').val() == '1') {
    $(
    '#inval-0').attr('disabled''disabled');
    $(
    '#inval-1').attr('checked''checked');
    } else {
    $(
    '#inval-0').attr('disabled'false);
    }
    });

    я же выше код такой приводил... причин не выполняться этому коду не вижу :( ...хотя вот это кусок может козлить:
    PHP:
    $('#vehicle_pre_type').find('input').attr('checked'false);
    _block_person.find('input').attr('checked'false);
    _block_location.find('#location option:first').selected(true);
    _block_accident.find('option:first').selected(true);