jQuery événement de Modification d'un <input> élément de toute façon à conserver la valeur précédente?
J'ai été la recherche autour de ce matin et je n'ai pas trouver de solutions simples... en gros, je veux capturer un changement d'élément d'entrée, mais aussi de connaître la valeur précédente.
Voici un événement de changement et un élément de saisie dans sa forme la plus simple. Clairement, je peux obtenir la nouvelle valeur avec $(elem).val(), mais est-il une méthode sournoise qui me manque pour arriver à la valeur précédente? Je ne vois rien dans le jQuery API pour le faire, mais peut-être que quelqu'un à déjà fait cela et a quelques conseils?
<script>
$(document).ready(function(){
$('#myInputElement').bind('change', function(){
//var oldvalue = ???
var newvalue = $(this).val();
});
});
</script>
<input id="myInputElement" type="text">
Je ne suis pas contre l'écriture de ma propre solution, je veux juste m'assurer que je ne suis pas recréer la roue ici.
Vous devez vous connecter pour publier un commentaire.
Une meilleure approche est de stocker de l'ancienne valeur de l'aide .les données. Cette méthode évite la création d'un var qui vous devriez rester loin de et garde les informations encapsulées à l'intérieur de l'élément. Un exemple concret pour expliquer pourquoi les variables Globales sont mauvais est documenté ici
e.g
.data('oldVal')
est défini que lorsque la page est chargée et jamais après. Probablement dans lechange
oufocus
les cas, il doit être quelque chose comme$(this).data('oldVal', $(this).val())
?focus
événement.Cela pourrait faire l'affaire:
Démo ici
<input data-new="initialValue" />
dans votre code HTML et vous devez remplacer cette valeur sur chaque manipulation.defaultValue
est celui qui a été définie au chargement de la page. Valeur précédente (selon ma compréhension) est la valeur du contrôle avant un changement. Si la valeur par défaut est 1 et utilisateur 2, puis à 3, le valeur sera de 2.Vous pourriez avoir de la valeur du champ de saisie copié dans un champ caché à chaque fois que le focus quitte le champ de saisie (ce qui ne devrait faire ce que vous voulez). Voir le code ci-dessous:
(non testé, mais ça devrait fonctionner).
Chaque élément du DOM est un attribut appelé valeur par défaut. Vous pouvez l'utiliser pour obtenir la valeur par défaut si vous voulez juste pour comparer la première modification de données.
Dans Russ réponse qu'il lie les événements de focus. Je ne pense pas que c'est nécessaire.
Vous pouvez stocker l'ancienne valeur dans le changement de l'événement.
Certains points.
Utiliser $.données au Lieu de $.fn.les données
Ensuite, Vous pouvez obtenir la valeur précédente par le biais de l'objet d'événement, sans pour autant compliquer votre vie:
Être averti que la valeur par défaut n'est PAS la dernière valeur. C'est la valeur que le champ est initialisé avec. Mais vous pouvez utiliser $.les données de garder une trace de la "oldValue"
Je vous conseille toujours de vous déclarer "l'événement" de l'objet dans vos fonctions de gestionnaire d'événements et de les contrôler avec firebug (console.journal(event)) ou quelque chose. Vous trouverez beaucoup de choses utiles que vous sauver de la création/l'accès jquery objets (qui sont grands, mais si vous pouvez être plus rapide...)
J'ai créé ces fonctions sont basées sur Joey Guerra de la suggestion, je vous remercie pour cela. Je suis d'élaborer un peu, peut-être quelqu'un peut l'utiliser. La première fonction checkDefaults() est appelée lors d'un changement d'entrée, la seconde est appelée lorsque le formulaire est envoyé à l'aide de jQuery.post. div.updatesubmit est mon bouton submit, et de la classe de needsupdate' est un indicateur qu'une mise à jour est faite mais pas encore soumis.
J'ai trouvé un sale truc, mais il fonctionne, vous pouvez utiliser la fonction hover pour obtenir la valeur avant de changer!
focus
? qui doit attraper les souris et le clavier