equivocadamente usei attr () no meu post inicial, eu quis dizer data (), mas ele retorna 'indefinido' para mim.
precisa
6
Acabei de me deparar com isso e estou me perguntando se o primeiro método é preferido devido a razões de desempenho ou outra razão? @JordanBrown
Clarkey
1
@ Clarkey meu palpite seria que data () é mais rápido que attr () porque attr () tem que fazer um trabalho extra para descobrir que tipo de atributo é. Apenas um palpite.
Seu assinante de mudança assina o evento de mudança do select, portanto, o thisparâmetro é o elemento select. Você precisa encontrar o filho selecionado para obter o ID de dados.
Sempre tente apoiar seu bloco de código publicado com explicações e / ou referências (mesmo que a solução seja simples / "autoexplicativa") no StackOverflow, porque nem todo mundo está familiarizado com a sintaxe / comportamento / desempenho de um determinado idioma.
Sempre tente apoiar seu bloco de código publicado com explicações e / ou referências (mesmo que a solução seja simples / "autoexplicativa") no StackOverflow, porque nem todo mundo está familiarizado com a sintaxe / comportamento / desempenho de um determinado idioma.
Mckmackusa 23/04/19
5
Você pode usar a contextsintaxe com thisou $(this). Este é o mesmo efeito que 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'));});
Por uma questão de microoptimização, você pode optar por find(). Se você é mais um jogador de código, a sintaxe de contexto é mais breve. Tudo se resume ao estilo de codificação basicamente.
Sempre tente apoiar seu bloco de código publicado com explicações e / ou referências (mesmo que a solução seja simples / "autoexplicativa") no StackOverflow, porque nem todo mundo está familiarizado com a sintaxe / comportamento / desempenho de um determinado idioma.
Mckmackusa 23/04/19
O OP não possui um idatributo no elemento de seleção (e não precisa de um por causa do utilitário de this).
Sempre tente apoiar seu bloco de código publicado com explicações e / ou referências (mesmo que a solução seja simples / "autoexplicativa") no StackOverflow, porque nem todo mundo está familiarizado com a sintaxe / comportamento / desempenho de um determinado idioma.
Respostas:
Você precisa encontrar a opção selecionada:
ou
embora o primeiro método seja preferido.
fonte
Tente o seguinte:
Seu assinante de mudança assina o evento de mudança do select, portanto, o
this
parâmetro é o elemento select. Você precisa encontrar o filho selecionado para obter o ID de dados.fonte
find()
é muito mais rápido do quechildren()
mesmo em casos como este, onde só temos uma profundidade árvore de 2.fonte
Javascript de baunilha:
fonte
Você pode usar a
context
sintaxe comthis
ou$(this)
. Este é o mesmo efeito quefind()
.Por uma questão de microoptimização, você pode optar por
find()
. Se você é mais um jogador de código, a sintaxe de contexto é mais breve. Tudo se resume ao estilo de codificação basicamente.Aqui está uma comparação de desempenho relevante .
fonte
fonte
id
atributo no elemento de seleção (e não precisa de um por causa do utilitário dethis
).isso funciona para mim
e o script
fonte