2012-03-06 2 views
3

Я прячусь некоторые элементы на основе текущего значения выберите поле со следующим JQuery:Как использовать значение раскрывающегося списка поля выбора для загрузки страницы, чтобы скрыть элемент с помощью JQuery?

$('.select').change(function() { 
    $(this).parent().siblings('*[class*=hide-if-]').show(); 
    $(this).parent().siblings('.hide-if-' + $(this).val()).hide(); 
}); 

И это прекрасно работает. (элементы имеют динамические классы, например, «hide-if-123»)

Однако я также хотел бы скрыть соответствующие элементы при загрузке страницы. Должен ли я использовать другую функцию (вместо «изменить»)?

Или, может быть, поставить код вне функции, так что он выполняется при загрузке и при изменении? Я попытался это:

$('.select').parent().siblings('.hide-if-' + $('.select').val()).hide(); 

, но он не работает. Я полагаю, что у меня есть эта часть $('.select').val() неправильно.

Важно, чтобы в начале строки оно получало значение того же поля выбора, что и "select". Я также пробовал:

$('.select').parent().siblings('.hide-if-' + $(this).val()).hide(); 

но все еще не повезло.

Большое спасибо за помощь!

ответ

2

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

$(function() { 
    $('.select').trigger('change'); 
}); 
+0

Спасибо, это работает отлично! Я новичок в JS, если вы этого не заметили, и этот совет - отличный урок. – Elizabeta

1

Вы можете просто вызвать обработчик изменений вы уже создали:

$('.select').change(function() { 
    $(this).parent().siblings('*[class*=hide-if-]').show(); 
    $(this).parent().siblings('.hide-if-' + $(this).val()).hide(); 
}).change(); 

Calling .change() без параметров является эквивалентом .trigger('change').

Хотя, говорит, что я не понимаю, почему ваш код:

$('.select').parent().siblings('.hide-if-' + $('.select').val()).hide(); 

не будет работать - делать все элементы существуют, когда страница первые грузы? И приведенная выше строка включена в готовый обработчик документа и/или в конце тела после рассматриваемых элементов)?

+0

Действительно, я думал, что он тоже должен работать и потратил два часа на то, чтобы понять, почему это не так. Добавление функции из нижеприведенного ответа сделало трюк. Спасибо за ваше время, хотя я это ценю. – Elizabeta

+0

Добро пожаловать. Обратите внимание, что вы должны добавить обработчик изменений в готовый документ (или в конец тела) - так выше, где я добавил вызов '.change()' сразу после привязки обработчика, который, как я предполагал, уже готов в документе. – nnnnnn

0

добавить общий класс для всех элементов и использовать CSS, чтобы скрыть их

.hidden-class{ display:none} 

Выгода дон; т придется ждать сценария пнуть, чтобы сделать элементы скрыты

+0

Классы добавляются динамически. Если я скрою их с помощью CSS, они станут непригодными, если JS отключен. Спасибо хоть! – Elizabeta