2013-11-19 4 views
0

Следующий код работает нормально, но я хочу скрыть .search-form #city, если он не имеет выбранного атрибута или пуст. Спасибо заранее за ваше время.Как скрыть список выбора, если он пуст

$('.search-form #city').parent().hide() 
cities = $('.search-form #city').html() 
$('.search-form #country').change -> 
    country = $('.search-form #country :selected').text() 
    escaped_country = country.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1') 
    options = $(cities).filter("optgroup[label='#{escaped_country}']").html() 
    if options 
    $('.search-form #city').html(options) 
    $('.search-form #city').parent().show() 
    else 
    $('.search-form #city').empty() 
    $('.search-form #city').parent().hide() 
+0

Так что я предполагаю, что это не ваш код, от всех фильтров, используемых здесь, которые должны быть меньше неприятностей. Использование класса '. Search-form' в'. Search-form # city' неоднозначно, '# city' должен быть уникальным, поэтому это' ID'. Начните с атрибута, как в 'typeof $ ('# city'). Attr ('selected')! == 'undefined'', и если список пуст' $ (' # city '). Children (' li '). .length === 0) '.. – dbf

+0

Вы правы, это не мой код. Фактическая иерархия следующая '$ ('. search-form .field #city'). parent(). hide()' и я хочу скрыть '.field', если #city не выбран. – Murtza

+0

Ну, код для этого всего 2 комментария выше этого, просто замените '$ ('# city')' на '$ ('. Search-form .field #city')' и сделайте с ним. Это все равно означает, что вы не знаете, что '# city' должен быть UNIQUE. Он должен появляться только один раз в DOM (Document Object Model). Поэтому '$ ('. Search-form .field #city')' или '$ ('# city')' оба будут выбирать один и тот же элемент. – dbf

ответ

1
if($('.search-form #city').find('option').length==0 || $('.search-form #city').find(':selected').length==0) 
$('.search-form #city').hide(); 
Смежные вопросы