Je suis en train de créer un CMS sur mesure. La section spécifique sur laquelle je travaille concerne la gestion d'une galerie de photos. Sur la page où l'utilisateur peut mettre à jour les détails d'un certain album, j'utilise $.ajax de jQuery pour effectuer une grande partie de la mise à jour.

Par exemple, chaque image a un champ de légende à côté d'elle, et je lie l'événement focusout à mon appel ajax, qui fonctionne très bien, et permet à l'utilisateur de parcourir et de mettre à jour rapidement toutes les légendes pour le Photos.

Cependant, comme je lie l'événement focusout, il est probable qu'il soit appelé beaucoup, surtout lorsqu'il n'est pas nécessaire. Disons, par exemple, qu'ils parcourent trois champs qu'ils ne modifient pas. Un appel $.ajax sera effectué pour chaque fois qu'ils auront appuyé sur tab, même s'ils n'ont pas modifié la valeur d'entrée.

Donc, ma question est de savoir comment pouvez-vous stocker et détecter si une valeur est différente de ce qu'elle était à l'origine (ou la dernière fois qu'un appel ajax a été effectué)?

Cela peut-il être fait en utilisant .data() de jQuery?

0
Alex Coplan 29 oct. 2011 à 18:35

3 réponses

Meilleure réponse

Résolu en utilisant jQuery très simple:

Dans le document. déjà:

$('.caption_field').each(function() {
    var startval = $(this).val();
    $(this).data('setval',startval);
});

Ensuite, lorsque l'appel ajax est effectué:

if (caption == $(this).data('setval')) return; // not changed

Lorsque l'appel revient avec succès:

field.data('setval',caption);
0
Alex Coplan 29 oct. 2011 à 15:06

La clé pour le faire correctement est de garder vos données séparées du champ de saisie. Lorsque l'utilisateur brouille la zone de saisie, vous pouvez vérifier la valeur par rapport aux données en mémoire. Si les valeurs diffèrent, vous effectuez la demande ajax. Sinon, vous ne faites rien et enregistrez ce voyage aller-retour.

Vous pouvez écrire tout cela vous-même, mais il y a pas mal de cadres qui sont apparus au cours des dernières années qui le font très bien. Parmi eux:

Backbone.js

Spine.js

Knockout.js

L'épine dorsale semble être la plus populaire d'entre elles.

1
Craig M 29 oct. 2011 à 14:51

Vous devez masquer les valeurs d'origine dans le type d'entrée et comparer les valeurs d'origine et actuelles dans chaque événement de mise au point.

0
lontivero 29 oct. 2011 à 14:51