2011-01-29 10 views
8

Ho un campo in fase di aggiornamento da parte di jeditable. Voglio emettere un messaggio di avviso prima di inviare aggiornamenti se il valore viene ridotto (il che comporterebbe la perdita di dati), ma non se viene aumentato.Come accedere ai vecchi e ai nuovi valori prima di inoltrare con jeditable

Questo sembra un buon candidato per la funzione onsubmit di jeditable, che posso attivare felicemente. Posso ottenere il nuovo valore da $ ('input', this) .val(), ma come ottengo il valore originale a cui confrontarlo in questo contesto?

...

Poiché la pubblicazione di cui sopra spiegazione/domanda, mi è venuta in mente una soluzione di sorta. Cambiando l'invocazione in jquery.ready da

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

a

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

posso usare settings.submitdata.old_value nel metodo onSubmit.

Ma deve esserci sicuramente un modo migliore? Jeditable deve ancora avere il vecchio valore nascosto da qualche parte per poterlo ripristinare. Quindi la domanda diventa come posso accedervi dalla funzione onsubmit?

Molte grazie in anticipo per eventuali suggerimenti.

risposta

8

Qui è la mia modificabile (si sta usando la funzione 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"); 
     }); 
    }); 

In submitEdit origvalue è il valore originale prima della modifica

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

Una soluzione molto più semplice sarebbe quella di aggiungi questa linea alla tua variabile submitdata

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