2011-01-29 27 views
8

Tôi có một trường đang được cập nhật bằng jeditable. Tôi muốn xuất một thông báo cảnh báo trước khi gửi các cập nhật nếu giá trị đang được giảm (điều này sẽ dẫn đến dữ liệu bị mất), nhưng không phải nếu nó đang được tăng lên.Cách truy cập các giá trị cũ và mới trước khi gửi với jeditable

Điều này có vẻ là một ứng cử viên tốt cho chức năng onsubmit của jeditable, mà tôi có thể kích hoạt hạnh phúc. Tôi có thể lấy giá trị mới từ $ ('input', this) .val(), nhưng làm thế nào để tôi có được giá trị ban đầu để so sánh nó trong ngữ cảnh này?

...

Kể từ khi đăng giải thích/câu hỏi trên, tôi đã đưa ra giải pháp các loại. Bằng cách thay đổi invokation trong jquery.ready từ

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

để

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

tôi có thể sử dụng settings.submitdata.old_value trong phương pháp onsubmit.

Nhưng chắc chắn phải có cách nào tốt hơn? jeditable vẫn phải có giá trị cũ giấu ở đâu đó để có thể hoàn nguyên nó. Vì vậy, câu hỏi trở thành như thế nào tôi có thể truy cập từ chức năng onsubmit?

Rất cám ơn trước vì đã đề xuất bất kỳ.

Trả lời

8

Sau đây là tôi có thể chỉnh sửa (nó được sử dụng chức năng 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"); 
     }); 
    }); 

Trong submitEdit origvalue là giá trị ban đầu trước khi chỉnh sửa

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

Một giải pháp dễ dàng hơn nhiều sẽ được thêm dòng này vào biến gửi của bạn

"submitdata": function (value, settings) { 
     return { 
      "origValue": this.revert 
     }; 
} 
Các vấn đề liên quan