j'ai utilisé par erreur attr () dans mon message initial, je voulais dire data () mais cela renvoie "indéfini" pour moi.
userBG
6
Je viens de découvrir cela et je me demande si la première méthode est préférée pour des raisons de performances ou pour une autre raison? @JordanBrown
Clarkey
1
@Clarkey, je suppose que data () est plus rapide que attr () car attr () doit faire un travail supplémentaire pour déterminer de quel type d'attribut il s'agit. Juste une supposition.
Votre abonné au changement s'abonne à l'événement de changement de la sélection, le thisparamètre est donc l'élément de sélection. Vous devez trouver l'enfant sélectionné pour obtenir l'ID de données.
Veuillez toujours vous efforcer de prendre en charge votre bloc de code publié avec des explications et / ou des références (même si la solution est simple / "auto-explicative") sur StackOverflow car tout le monde ne connaît pas la syntaxe / le comportement / les performances d'une langue donnée.
Veuillez toujours vous efforcer de prendre en charge votre bloc de code publié avec des explications et / ou des références (même si la solution est simple / "auto-explicative") sur StackOverflow car tout le monde ne connaît pas la syntaxe / le comportement / les performances d'une langue donnée.
mickmackusa
5
Vous pouvez utiliser la contextsyntaxe avec thisou $(this). C'est le même effet 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'));});
En matière de microoptimisation, vous pouvez opter pour find(). Si vous êtes plutôt un golfeur de code, la syntaxe du contexte est plus brève. Il s'agit essentiellement du style de codage.
Veuillez toujours vous efforcer de prendre en charge votre bloc de code publié avec des explications et / ou des références (même si la solution est simple / "auto-explicative") sur StackOverflow car tout le monde ne connaît pas la syntaxe / le comportement / les performances d'une langue donnée.
mickmackusa
L'OP n'a pas d' idattribut sur l'élément select (et n'en a pas besoin en raison de l'utilité de this).
Veuillez toujours vous efforcer de prendre en charge votre bloc de code publié avec des explications et / ou des références (même si la solution est simple / "auto-explicative") sur StackOverflow car tout le monde ne connaît pas la syntaxe / le comportement / les performances d'une langue donnée.
Réponses:
Vous devez trouver l'option sélectionnée:
ou
bien que la première méthode soit préférée.
la source
Essayez ce qui suit:
Votre abonné au changement s'abonne à l'événement de changement de la sélection, le
this
paramètre est donc l'élément de sélection. Vous devez trouver l'enfant sélectionné pour obtenir l'ID de données.la source
find()
c'est beaucoup plus rapide quechildren()
même dans des cas comme celui-ci où nous n'avons qu'une profondeur d'arbre de 2.la source
Javascript vanille:
la source
Vous pouvez utiliser la
context
syntaxe avecthis
ou$(this)
. C'est le même effet quefind()
.En matière de microoptimisation, vous pouvez opter pour
find()
. Si vous êtes plutôt un golfeur de code, la syntaxe du contexte est plus brève. Il s'agit essentiellement du style de codage.Voici une comparaison de performances pertinente .
la source
la source
id
attribut sur l'élément select (et n'en a pas besoin en raison de l'utilité dethis
).ça marche pour moi
et le script
la source