如何在使用jeditable进行提交之前访问旧值和新值

pet*_*les 8 jeditable onsubmit

我有一个字段由jeditable更新.我想在提交更新之前输出警告消息,如果值正在减少(这会导致数据丢失),但是如果它正在增加则不会.

这似乎是jeditable的onsubmit函数的一个很好的候选者,我可以愉快地触发它.我可以从$('input',this).val()中获取新值,但是如何在此上下文中获取要与之进行比较的原始值?

...

自从发布上述解释/问题后,我想出了各种解决方案.通过更改jquery.ready中的invokation

$('#foo').editable(...);
Run Code Online (Sandbox Code Playgroud)

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

我可以在onsubmit方法中使用settings.submitdata.old_value.

但肯定有更好的方法吗?为了能够还原它,jeditable必须仍然将旧值隐藏在某个地方.那么问题就变成如何从onsubmit函数访问它?

非常感谢任何建议.

小智 11

更简单的解决方案是将此行添加到submitdata变量中

"submitdata": function (value, settings) {
      return {
           "origValue": this.revert
      };
 }
Run Code Online (Sandbox Code Playgroud)


san*_*oIT 8

这是我的可编辑(它使用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");
        });
    });
Run Code Online (Sandbox Code Playgroud)

在submitEdit中,origvalue是编辑前的原始值

    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);
    }
Run Code Online (Sandbox Code Playgroud)