$(‘выберите опцию: выбрано’).text() и Attr.указано устаревшее предупреждение

#javascript #jquery #backbone.js

#javascript #jquery #backbone.js

Вопрос:

В моем проекте мне нужно обновить модель магистрали как выбранным значением, так и текстом из <select> .

Для этой цели я вызываю

 model.set 'value', $('select').val()
model.set 'value_text', $('select option:selected').text()
  

(Я также использую coffee script). Из-за некоторой проблемы в jQuery v2.0.3, которую я сейчас использую, я получаю это предупреждение:

Attr.specified устарел. Его значение всегда равно true.

Я знаю, что были вопросы по SO об этом предупреждении, но я хочу спросить что-то совершенно другое:

Поскольку обновление до более новой версии jQuery (где проблема может быть исправлена) в ближайшие несколько месяцев невозможно, я хотел бы спросить, есть ли другой способ получить текст выбранной опции вместо того, который использовался выше. Я не против чисто JS-решения, если нет другого, использующего jQuery.

Любая помощь высоко ценится.

РЕДАКТИРОВАТЬ для @KevinB: предупреждение вызвано вопросом, есть ли selected атрибут для этой опции.

Комментарии:

1. Вы пробовали опцию: активный? Какие псевдоселекторы вы пробовали?

2. Что именно вызывает предупреждение? использование :выбрано? или использование .text для опции? .val() при выборе?. Очевидно, что решением было бы вырезать часть, которая вызывает это. Это или просто игнорируйте предупреждение, потому что кодирование вокруг него сделает код менее читаемым.

3. Можете ли вы создать jsfiddle для этого?

4. Мое предложение состоит в том, чтобы сначала прокомментировать использование .val(), чтобы убедиться, что оно вызвано селектором :selected psudo. Если предупреждение все еще происходит, замените :выбрано на .filter .

5. затем просто замените его на .filter . $('select option').filter(function (i) { return this.selected; })

Ответ №1:

Чтобы * исправить * это, не меняя ничего другого, вы можете просто использовать .Фильтр.

 $('select option').filter(function (i) { return this.selected; }).text();
  

Ответ №2:

Я предпочитаю делать это другим подходом. Смотрите код.

Вид изнутри.

 events:
    "change input":"updateModel"
    "change select" : "SelectedItem" //Just for example.

selectedItem:(element)->
    selectedOption = element.target.selectedOptions
    alert **selectedOption.item().value** // the value of the selected item. now you can set it on model.

updateModel:(element)->
    @model.setNew(element.target.name, element.target.value)
  

Внутри модели.

 setNew:(newName, newValue)->
    @set newName, newValue
  

HTML-файл.

 <select>
<option value="renan">Renan</option>
<option value="carvalho">Carvalho</option>
</select>

<input type="text" name="customer" />
  

Надеюсь, это поможет.

Комментарии:

1. Это работает с <input> , но совсем не с <select> и это опции, поскольку целью является <select> сам name и поскольку вместо элемента, мне нужен текст…