błędnie użyłem attr () w moim początkowym poście, miałem na myśli data (), ale dla mnie zwraca „niezdefiniowany”.
userBG
6
Właśnie się z tym spotkałem i zastanawiam się, czy pierwsza metoda jest preferowana ze względu na wydajność, czy z innego powodu? @JordanBrown
Clarkey
1
@Clarkey zgaduję, że data () jest szybsza niż attr (), ponieważ attr () musi wykonać dodatkową pracę, aby ustalić, jaki to jest typ atrybutu. Tylko zgadnij.
Subskrybent zmiany subskrybuje zdarzenie zmiany wybranego, więc thisparametrem jest element select. Musisz znaleźć wybrane dziecko, aby uzyskać identyfikator danych.
Zawsze staraj się obsługiwać wysłany blok kodu za pomocą objaśnień i / lub referencji (nawet jeśli rozwiązanie jest proste / „samoobjaśniające”) na StackOverflow, ponieważ nie wszyscy znają składnię / zachowanie / wydajność danego języka.
Zawsze staraj się obsługiwać wysłany blok kodu za pomocą objaśnień i / lub referencji (nawet jeśli rozwiązanie jest proste / „samoobjaśniające”) na StackOverflow, ponieważ nie wszyscy znają składnię / zachowanie / wydajność danego języka.
mickmackusa,
5
Możesz użyć contextskładni za pomocą thislub $(this). Jest to taki sam efekt jak 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'));});
W ramach mikrooptymalizacji możesz się zdecydować find(). Jeśli jesteś bardziej golfistą, składnia kontekstu jest krótsza. Zasadniczo sprowadza się do stylu kodowania.
Zawsze staraj się obsługiwać wysłany blok kodu za pomocą objaśnień i / lub referencji (nawet jeśli rozwiązanie jest proste / „samoobjaśniające”) na StackOverflow, ponieważ nie wszyscy znają składnię / zachowanie / wydajność danego języka.
mickmackusa,
OP nie ma idatrybutu na elemencie select (i nie potrzebuje go ze względu na użyteczność this).
Zawsze staraj się obsługiwać wysłany blok kodu za pomocą objaśnień i / lub referencji (nawet jeśli rozwiązanie jest proste / „samoobjaśniające”) na StackOverflow, ponieważ nie wszyscy znają składnię / zachowanie / wydajność danego języka.
Odpowiedzi:
Musisz znaleźć wybraną opcję:
lub
chociaż pierwsza metoda jest preferowana.
źródło
Spróbuj wykonać następujące czynności:
Subskrybent zmiany subskrybuje zdarzenie zmiany wybranego, więc
this
parametrem jest element select. Musisz znaleźć wybrane dziecko, aby uzyskać identyfikator danych.źródło
find()
Jest znacznie szybszy niżchildren()
w takich przypadkach, w których mamy tylko 2 drzewa głębokości.źródło
JavaScript waniliowy:
źródło
Możesz użyć
context
składni za pomocąthis
lub$(this)
. Jest to taki sam efekt jakfind()
.W ramach mikrooptymalizacji możesz się zdecydować
find()
. Jeśli jesteś bardziej golfistą, składnia kontekstu jest krótsza. Zasadniczo sprowadza się do stylu kodowania.Oto odpowiednie porównanie wydajności .
źródło
źródło
id
atrybutu na elemencie select (i nie potrzebuje go ze względu na użytecznośćthis
).to działa dla mnie
i skrypt
źródło