Comment accéder à d'anciennes et de nouvelles valeurs avant de le soumettre à jeditable

StackOverflow https://stackoverflow.com/questions/4840007

  •  27-10-2019
  •  | 
  •  

Question

J'ai un champ mis à jour par jeditable. Je veux émettre un message d'avertissement avant de soumettre des mises à jour si la valeur est réduite (ce qui aurait pour conséquence la perte de données), mais pas si elle est en cours a augmenté.

Cela semble un bon candidat pour la fonction onsubmit jeditable, que je peux déclencher heureusement. Je peux obtenir la nouvelle valeur de $ ( « entrée », this) .val (), mais comment puis-je obtenir la valeur originale pour comparer dans ce contexte?

...

Depuis l'affichage de l'explication ci-dessus / question, je suis venu avec une solution de toutes sortes. En changeant le invokation dans jquery.ready de

$('#foo').editable(...);

à

$('#foo').hover(function(){
  var old_value = $(this).text();
  $(this).editable('ajax.php', {
     submitdata {'old_value':old_value}
  });
});

Je peux utiliser settings.submitdata.old_value dans la méthode onsubmit.

Mais il y a sûrement être une meilleure façon? doit jeditable ont encore l'ancienne valeur à l'écart quelque part pour être en mesure de revenir il. La question est de savoir comment puis-je accéder que de la fonction onsubmit?

Un grand merci à l'avance pour toute suggestion.

Était-ce utile?

La solution

Voici mon modifiable (il utilise la fonction submitEdit):

   $(function () {
        $('.editable').editable(submitEdit, {
            indicator: '<img src="content/images/busy.gif">',
            tooltip: '@Html.Resource("Strings,edit")',
            cancel: '@Html.Resource("Strings,cancel")',
            submit: '@Html.Resource("Strings,ok")',
            event: 'edit'
        });
        /* Find and trigger "edit" event on correct Jeditable instance. */
        $(".edit_trigger").bind("click", function () {
            $(this).parent().prev().trigger("edit");
        });
    });

Dans submitEdit origvalue est la valeur initiale avant l'édition

    function submitEdit(value, settings) {
        var edits = new Object();
        var origvalue = this.revert;
        var textbox = this;
        var result = value;

        // sb experiment
        var form = $(this).parents('form:first');
        // end experiment

        edits["field"] = form.find('input[name="field"]').val();
        edits["value"] = value;
        var returned = $.ajax({
            url: '@Url.Action("AjaxUpdate")',
            type: "POST",
            data: edits,
            dataType: "json",
            complete: function (xhr, textStatus) {
                // sever returned error?
                // ajax failed?
                if (textStatus != "success") {
                    $(textbox).html(origvalue);
                    alert('Request failed');
                    return;
                }

                var obj = jQuery.parseJSON(xhr.responseText);
                if (obj != null && obj.responseText != null) {
                    alert(obj.responseText);
                    $(textbox).html(origvalue);
                }
            }
        });
        return (result);
    }

Autres conseils

Une solution beaucoup plus facile serait d'ajouter cette ligne à votre variable submitdata

"submitdata": function (value, settings) {
      return {
           "origValue": this.revert
      };
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top