jQuery распознает неправильное состояние переключателей при загрузке страницы, когда значение радио = «Нет» и ни одно радио не выбрано

0

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

Класс testclass добавляются к элементу slave по умолчанию (то есть HTML загрузки страницы является:

<input type="radio" value="No" name="master" /> No
<input type="radio" value="Yes" name="master" /> Yes

<input type="text" name="a" id="slave" class="testclass" />

Следующий jQuery удаляет класс, если выбрано радио "Нет"

$("input[name$='master']").change(function(){
    if(this.value === 'No') {
          $('#slave').removeClass('testclass'); 
    } else {
         $('#slave').addClass('testclass');
    }
}); $("input[name$='master']").filter(':checked').change()

Это работает отлично с точки зрения перемещения назад и вперед между состояниями после загрузки страницы, но я запускаю функцию на загрузке страницы, и она удаляет класс в то время, когда не выбрано радио для проверки. (Хорошо, если "Да" загружено, как отмечено).

Интересно, что это тоже нормально, если я отменил условие, так что для удаления класса требуется "Да" (загрузка страниц с классом все еще там).

Я думал, что javascript может приравниваться к выбору без значения "Нет", поэтому я пробовал строгое равенство, но никакой разницы.

Есть идеи?

  • 0
    $ ("input [name $ = 'master']"). change (function () {} будет работать только после того, как вы измените состояние переключателя с атрибутом name, который содержит "master". Очевидно, что код в эта функция не срабатывает при загрузке страницы.
  • 0
    Почему класс удаляется тогда?
Показать ещё 7 комментариев
Теги:
radio-button

2 ответа

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

Я разработал для вас скрипку. Вот ссылка на него => http://jsfiddle.net/6c7F2/

Я думаю, что лучший способ ответить на этот вопрос - дать вам понять несколько вещей о коде, который вы здесь указали. Я буду писать в комментариях к нему.

$( document ).ready(function(){ // this function is called once your page loads
    $("input[name$='master']").change(function(){
        //this function is not called until you click the radio buttons. 
        // Be careful to note that this function is never called on page load. 
        // You can test it in the fiddle I created
        if(this.value === 'No') {
            $('#slave').removeClass('testclass'); 
            // this alert in the fiddle is called only
            // when you click the radio buttons. Not on page load
            alert("It entered");
        } else {
            $('#slave').addClass('testclass');
        }
    }); 
    $("input[name$='master']").filter(':checked').change()
});

Поэтому убедитесь, что вещи и проверки, которые вы хотите выполнить при загрузке страницы, должны находиться за пределами $("input[name$='master']").change(function(){});

Это срабатывает только при нажатии переключателей, а не на загрузке страницы.

0

Это происходит из-за того, что вы не выбрали значение загрузки страницы и все еще запускаете событие.

Пытаться:

Установите флажок по умолчанию.

<input type="radio" value="No" name="radios" checked="checked"/> No

ИЛИ

Удалить эту строку

$("input[name$='master']").filter(':checked').change()
  • 0
    Мда , но мне нужно форма быть пустым , прежде чем пользователь сохраняет любые данные, и я также необходимо загрузить состояние страницы , когда они приходят , если есть состояние загрузки. Также он отлично работает с требованием «Да» и не выбран ни один штат. Есть идеи, почему «Нет» отличается?

Ещё вопросы

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