Question

J'essaie de réinitialiser l'attribut de valeur réelle d'une entrée afin qu'elle puisse être réinitialisée à cette valeur si elle est réinitialisée, pas nécessairement la valeur d'origine lors du chargement du formulaire. Le problème est que ces changements ne semblent pas prendre effet. J'ai essayé les deux:

$(this).attr('value', $(this).val());

ainsi que ....

$(this).val($(this).val());

Aucune de ces méthodes ne modifie réellement l'attribut value = "" de l'entrée, qui est utilisé lors de la réinitialisation d'un formulaire. Le problème est que si quelqu'un enregistre un formulaire (via AJAX), puis le modifie à nouveau et appuie sur Réinitialiser (sans enregistrer cette heure), il retournera aux valeurs d'origine de la page chargée, PAS aux dernières valeurs enregistrées, c'est ce que j'essaie d'obtenir. Je sais qu'il existe des moyens de contourner ce problème (stocker dans des variables locales ou autre), mais une solution jQuery serait bien meilleure. Des idées?

Était-ce utile?

La solution

quand vous faites quelque chose comme ça:

$(this).val($(this).val());

cela se traduit vraiment par:

var temp = $(this).val());
$(this).val(temp);

Donc, en substance, il suffit de remettre la même valeur.

Ce que vous voudrez faire concerne le chargement de document ou la demande AJAX, stocke la valeur dans une variable, puis la récupère lorsque le formulaire est réinitialisé.

Autres conseils

Cela ressemble à un truc cool, en voici un autre.

Vous pouvez modifier le DOM en remplaçant l'élément entier, donc au lieu de:

$('#my_input').val("new_value_here");

vous pouvez utiliser:

$('#my_input').replaceWith(' < input type="text" value="new_value_here" />');

J'ai mis au point une solution pour cela ...

Lors de la sauvegarde d'un formulaire (via AJAX, lors du rappel de réussite):

// Set 'savedValue' attr on elements (for when reset, will reset to last saved values)
$('#myForm input').each(function() {
    $(this).attr('savedValue', $(this).val());
});

Lorsque vous devez réinitialiser le formulaire:

// Reset form
if($('#myForm input:first').attr('savedValue')!=undefined) {
    // Have saved values, reset to last saved values
    $('#myForm input').each(function() {
        $(this).val($(this).attr('savedValue'));
    });
}
else {
    // No saved values, reset form
    $('#myForm')[0].reset();    
}

Cela fonctionne très bien pour les zones de texte, et avec un peu de peaufinage, vous pouvez le faire fonctionner avec n’importe quel type d’entrée. J'ai beaucoup d'entrées donc je voulais éviter de les stocker / réinitialiser manuellement si possible. Ce serait un bon plugin ... peut-être demain

Utilisez simplement thing.value = "foo " ;;; . Vérifiez si cela fonctionne quand un objet est un objet jQuery, ainsi qu'un objet DOM normal. utiliser attr ('valeur', $ (this) .val ()) ne fonctionnera pas comme vous le souhaitez

Même mieux qu’une variable locale, vous pouvez utiliser les méthodes jQuery Data pour stocker les valeurs de réinitialisation avec l’élément à réinitialiser.

Lors de la sauvegarde:

$(this).data("ResetValue", $(this).val());

À la réinitialisation:

$(this).val($(this).data("ResetValue"));

Changer les sélecteurs de manière appropriée et probablement ajouter le contrôle non défini comme mentionné par Ryan.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top