я по ошибке использовал attr () в своем первоначальном посте, я имел в виду data (), но он возвращает «undefined» для меня.
userBG
6
Я только что столкнулся с этим, и мне интересно, если первый метод предпочтительнее из-за соображений производительности или по другой причине? @JordanBrown
Кларки
1
@ Clarkey, я думаю, что data () быстрее, чем attr (), потому что attr () должен проделать дополнительную работу, чтобы выяснить, какой это тип атрибута. Просто угадай.
Ваш подписчик изменений подписывается на событие изменения выбора, поэтому thisпараметр является элементом выбора. Вам нужно найти выбранного ребенка, чтобы получить идентификатор данных.
Всегда старайтесь поддерживать свой опубликованный блок кода с пояснениями и / или ссылками (даже если решение простое / «самоочевидное») в StackOverflow, потому что не все знакомы с синтаксисом / поведением / производительностью данного языка.
Всегда старайтесь поддерживать свой опубликованный блок кода с пояснениями и / или ссылками (даже если решение простое / «самоочевидное») в StackOverflow, потому что не все знакомы с синтаксисом / поведением / производительностью данного языка.
mickmackusa
5
Вы можете использовать contextсинтаксис с thisили $(this). Это тот же эффект, что и find().
$('select').change(function(){
console.log('Clicked option value => '+ $(this).val());<!--undefined console.log('$(this) without explicit :select => '+ $(this).data('id'));--><!-- error console.log('this without explicit :select => '+this.data('id'));-->
console.log(':select & $(this) => '+ $(':selected', $(this)).data('id'));
console.log(':select & this => '+ $(':selected',this).data('id'));
console.log('option:select & this => '+ $('option:selected',this).data('id'));
console.log('$(this) & find => '+ $(this).find(':selected').data('id'));});
Что касается микрооптимизации, вы можете выбрать find(). Если вы больше любите играть в код, синтаксис контекста будет более кратким. Все сводится к стилю кодирования.
Всегда старайтесь поддерживать свой опубликованный блок кода с пояснениями и / или ссылками (даже если решение простое / «самоочевидное») в StackOverflow, потому что не все знакомы с синтаксисом / поведением / производительностью данного языка.
mickmackusa
У OP нет idатрибута в элементе выбора (и он не нужен из-за полезности this).
Всегда старайтесь поддерживать свой опубликованный блок кода с пояснениями и / или ссылками (даже если решение простое / «самоочевидное») в StackOverflow, потому что не все знакомы с синтаксисом / поведением / производительностью данного языка.
Ответы:
Вам нужно найти выбранную опцию:
или
хотя первый метод предпочтительнее.
источник
Попробуйте следующее:
Ваш подписчик изменений подписывается на событие изменения выбора, поэтому
this
параметр является элементом выбора. Вам нужно найти выбранного ребенка, чтобы получить идентификатор данных.источник
find()
намного быстрее, чемchildren()
даже в таких случаях, как этот, где у нас есть только дерево глубиной 2.источник
Ванильный Javascript:
источник
Вы можете использовать
context
синтаксис сthis
или$(this)
. Это тот же эффект, что иfind()
.Что касается микрооптимизации, вы можете выбрать
find()
. Если вы больше любите играть в код, синтаксис контекста будет более кратким. Все сводится к стилю кодирования.Вот соответствующее сравнение производительности .
источник
источник
id
атрибута в элементе выбора (и он не нужен из-за полезностиthis
).это работает для меня
и сценарий
источник