L'obtention de la valeur du select (liste déroulante) avant de changer
La chose que je veux réaliser est à chaque fois que le <select>
déroulante est changé, je veux la valeur de la liste déroulante avant de changer. Je suis en utilisant la version 1.3.2 de jQuery et de l'aide sur le changement de l'événement, mais de la valeur que je reçois là-bas, après le changement.
<select name="test">
<option value="stack">Stack</option>
<option value="overflow">Overflow</option>
<option value="my">My</option>
<option value="question">Question</option>
</select>
Permet de dire que actuellement Mon option est sélectionnée maintenant, quand je l'ai changer de pile dans l'événement onchange (c'est à dire quand je l'ai changé pour de la pile) je veux c'est de la valeur précédente c'est à dire mon attendus dans ce cas.
Comment cela peut-il être atteint?
Edit: Dans mon cas, je vais avoir de multiples sélectionnez les cases dans la même page et veulent la même chose pour être appliquée à l'ensemble d'entre eux. Aussi tous mes sélectionnez sont insérés après le chargement de la page via ajax.
- Avez-vous essayé ceci: stackoverflow.com/questions/1983535/...
Vous devez vous connecter pour publier un commentaire.
Combiner les l'accent événement avec le changement événement pour réaliser ce que vous voulez:
De travail exemple: http://jsfiddle.net/x5PKf/766
previous
var à l'intérieur du changement de gestionnaire.onchange
de l'événement ainsi que laonfocus
événement, alors il devrait fonctionner très bien. Avez-vous l'essayer?focus
événement qu'une seule fois. Merci pour la suggestion. 🙂$(this).blur();
à la fin de la fonction de changement declick
au lieu defocus
parce que si l'utilisateur modifie la valeur de multiples fois l'événement à ne pas se déclencher. À droite ?. Juste une idée.s'il vous plaît ne pas utiliser une approche globale de la var pour les ce magasin le retour à la valeur des données
voici un exemple: http://jsbin.com/uqupu3/2/edit
le code pour ref:
viens de voir que vous avez beaucoup de sélections sur la page - cette approche permettra également de travailler pour vous puisque, pour chaque sélectionnez stocker les prev de valeur sur les données de l'sélectionnez
jQuery.data
de toute façon.select
! La accepté de répondre à cassera car il correspond à toutes lesselect
mais seulement les magasins de la valeur de la première.data
est la meilleure façon de le faire. +1 🙂- Je aller pour Avi Pinto, solution qui utilise
jquery.data()
Utilisation de focus n'est pas une solution valable. Il fonctionne à la première fois que vous modifiez les options, mais si vous restez sur cela, sélectionnez l'élément et appuyez sur la touche "up" ou "down". Il ne va pas à travers les événements de focus de nouveau.
De sorte que la solution devrait être plus ressemble au suivant,
var $selectStatus = $('.my-select'); $selectStatus.on('change', function () { var newStatus = $(this).val(); var oldStatus = $(this).data('pre'); }).data('pre', $selectStatus.val());
$('mySelect').data('pre', $(this).val());
Il faut que :$('mySelect').each(function() { $(this).data('pre', $(this).val()); });
je n'ai pas assez de réputation pour modifier la réponse :/Le suivi de la valeur à la main.
Je suis à l'aide de l'événement "live", ma solution est fondamentalement similaire avec Dimitiar, mais au lieu d'utiliser "focus", mon précédent valeur est stockée en cas de "clic" est déclenchée.
garder sélectionné de la liste déroulante valeur, choisis jquery dans une variable globale avant d'écrire la liste déroulante, le 'changement' action de la fonction.
Si vous souhaitez définir la valeur précédente de la fonction, vous pouvez utiliser la variable globale.
Comment au sujet de l'aide personnalisée jQuery événement avec des angles regarder type d'interface;
Je sais que c'est un vieux thread, mais je pense peut ajouter un petit extra. Dans mon cas, j'ai été de vouloir passer sur le texte, val et quelques autres données attr. Dans ce cas, il est préférable de stocker l'ensemble de l'option prev valeur plutôt que de simplement le val.
Exemple de code ci-dessous:
EDIT:
J'ai oublié d'ajouter .clone() sur l'élément. de ne pas le faire lorsque vous essayez de récupérer les valeurs que vous finissent par tirer dans la nouvelle copie de la sélection plutôt que de la précédente. À l'aide de la méthode clone() stocke une copie de la sélectionner à la place d'une instance de celle-ci.
Bien, pourquoi ne pas mémoriser la valeur sélectionnée, et lorsque l'élément sélectionné est modifié, vous aurez l'ancienne valeur stockée? (et vous pouvez la mettre à jour à nouveau comme vous le souhaitez)
Utilisez le code suivant,je l'ai testé et sa fonctionne
Je voudrais contribuer une autre option pour résoudre ce problème, puisque les solutions proposées ci-dessus n'a pas résolu mon scénario.
Ce n'utiliser jQuery pour que def. est une dépendance ici, mais ce peut être adapté pour travailler en pure javascript. (Ajouter un écouteur pour le corps, de vérifier si l'objectif initial était de sélectionner, fonction execute, ...).
Par la fixation de la changer de port d'écoute du corps, vous pouvez très bien être sûr que ce sera le feu après spécifiques des écouteurs pour les sélectionne, sinon, la valeur des données précédentes " sera remplacé avant même de le lire.
C'est bien sûr en supposant que vous préférez utiliser des écouteurs pour votre précédente et vérifier la valeur. Il s'inscrit tout à fait dans l'unique responsabilité de modèle.
Remarque: Cela ajoute ce "précédent" de la fonctionnalité tous sélectionne, alors assurez-vous d'affiner les sélecteurs si nécessaire.
C'est une amélioration sur @thisisboris réponse. Il ajoute une valeur actuelle de données, de sorte que le code de contrôle lorsqu'une variable définie à la valeur actuelle est changé.
Meilleure solution:
Il y a plusieurs façons d'atteindre le résultat souhaité, c'est mon humble façon de le faire:
Laisser l'élément maintenir sa valeur précédente, il faut donc ajouter un attribut 'previousValue'.
Une fois initialisée, 'previousValue" pourrait maintenant être utilisé comme un attribut. En JS, pour accéder à la previousValue de cette sélection:
Après vous avez terminé d'utiliser 'previousValue', mise à jour de l'attribut à valeur actuelle.
J'avais besoin de révéler une autre div en fonction de la sélection
C'est comment vous pouvez le faire avec jquery et es6 syntaxe
HTML
JS