2016-08-30 3 views
2

Я хочу изменить значение моего раскрывающегося списка с помощью jQuery. Я использую следующий код:Выбранное свойство не было установлено в моем объекте select

<select id="id145" name="id145" class="dropdown" > 
    <option selected="selected" value="0">1 - test</option> 
    <option value="1">2 - test</option> 
</select> 

со следующим JS:

$('[name=id145] option').filter(function() { 
    return ($(this).val() == '1'); 
}).prop('selected', true); 

Я вижу, что в моем раскрывающемся списке значение 1 - выбрано (2 тестов), но всякий раз, когда я смотрю на исходном коде, с помощью инструментов инспектор, я все еще вижу это:

<option selected="selected" value="0">1 - test</option> 
<option value="1">2 - test</option> 

То, что я ожидал увидеть, и не бывает, это:

<option value="0">1 - test</option> 
<option selected="selected" value="1">2 - test</option> 

Кто-нибудь знает почему? и возможно ли это?

DEMO HERE

+0

Side Примечание: Вы можете установить значение избранных ** ** гораздо более просто с помощью 'val' на' select' самого элемента : '$ ('[name = id145]'). val ('1');' –

+0

@TJCrowder Даже с инструментами разработчика chrome или Firefox я до сих пор не вижу, чтобы свойство 'selected = selected' отображалось при использовании jQuery чтобы выбрать конкретное значение – Rotan075

+1

Простите, что «посмотреть на источник» обманул меня, и я не помнил, что вы смотрели 'selected'. –

ответ

0

Вы сказали, что даже с помощью инспектора DOM (например, правой кнопкой мыши выберите и выберите «Проверить элемент»), вы все еще видим selected="selected" на первый вариант, а не второй. (И я могу подтвердить, что, я тоже.)

Атрибут selected устанавливает состояние по умолчанию в option; он не обязательно отражает его текущее состояние. От the specification:

Атрибут selected является логическим атрибутом. Он представляет значение по умолчанию.

(курсив мой)

элемента selectedсвойство говорит вам свое текущее состояние, а не атрибут. Это похоже на атрибут value на input элементах (который также устанавливает значение по умолчанию, а не текущее значение). Если поле select было в form, и вы получили имя reset в форме, первый вариант будет выбран снова, потому что это значение по умолчанию для поля выбора.

Если вы хотите узнать, есть ли опция , то в настоящее время выбрана, эта информация недоступна на уровне атрибута. Вы должны осмотреть имущество, вместо:

$('[name=id145]').val('1'); 
 
$("[name=id145] option").each(function() { 
 
    console.log("Option " + this.value + ": Selected? " + this.selected); // or $(this).prop("selected") 
 
});
<select id="id145" name="id145" class="dropdown" > 
 
    <option selected="selected" value="0">1 - test</option> 
 
    <option value="1">2 - test</option> 
 
</select> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

А это правда. Это немного смутило меня. Выбранное значение является состоянием по умолчанию. Это имеет смысл. Спасибо за ваше объяснение. – Rotan075

Смежные вопросы