У меня есть переключатели на странице, которые добавляют или удаляют класс 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 может приравниваться к выбору без значения "Нет", поэтому я пробовал строгое равенство, но никакой разницы.
Есть идеи?
Я разработал для вас скрипку. Вот ссылка на него => 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(){});
Это срабатывает только при нажатии переключателей, а не на загрузке страницы.
Это происходит из-за того, что вы не выбрали значение загрузки страницы и все еще запускаете событие.
Пытаться:
Установите флажок по умолчанию.
<input type="radio" value="No" name="radios" checked="checked"/> No
ИЛИ
Удалить эту строку
$("input[name$='master']").filter(':checked').change()