Search code examples
jeditableonsubmit

How to access old and new values before submitting with jeditable


I have a field being updated by jeditable. I want to output a warning message before submitting updates if the value is being reduced (which would result in data being lost), but not if it's being increased.

This seems a good candidate for jeditable's onsubmit function, which I can trigger happily. I can get the new value from $('input', this).val(), but how do I get the original value to which to compare it in this context?

...

Since posting the above explanation / question, I've come up with a solution of sorts. By changing the invokation in jquery.ready from

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

to

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

I can use settings.submitdata.old_value in the onsubmit method.

But there surely has to be a better way? jeditable must still have the old value tucked away somewhere in order to be able to revert it. So the question becomes how can I access that from the onsubmit function?

Many thanks in advance for any suggestions.


Solution

  • Here is my editable (it is using the submitEdit function):

       $(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");
            });
        });
    

    In submitEdit origvalue is the original value before the edit

        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);
        }