2011-01-29 4 views
8

У меня есть поле, обновляемое jeditable. Я хочу вывести предупреждающее сообщение перед отправкой обновлений, если значение уменьшается (что приведет к утере данных), но не если оно увеличивается.Как получить доступ к старым и новым значениям перед отправкой с помощью jeditable

Это кажется хорошим кандидатом на функцию onsubmit jeditable, которую я могу вызвать с радостью. Я могу получить новое значение из $ ('input', this) .val(), но как получить исходное значение для сравнения в этом контексте?

...

С проводкой выше объяснение/вопрос, я придумал решение сортов. Изменяя invokation в jquery.ready от

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

в

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

я могу использовать settings.submitdata.old_value в onsubmit методе.

Но, безусловно, должен быть лучший способ? jeditable все равно должен иметь старую ценность, спрятанную где-то, чтобы иметь возможность ее вернуть. Итак, возникает вопрос, как я могу получить доступ к этому из функции onsubmit?

Большое спасибо за любые предложения.

ответ

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

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

Гораздо проще решение было бы добавьте эту строку в переменную submitdata

"submitdata": function (value, settings) { 
     return { 
      "origValue": this.revert 
     }; 
}