4

JQuery 用の JEditable プラグインを使用しており、プラグインにエラーを返して、以前の値に戻すように指示し、ユーザーにエラーを表示したいと考えています。同期 ajax 呼び出しを使用してこれを機能させていますが、代わりに非同期コールバックを使用することをお勧めします。私が遠くまで持っているコードは以下の通りです。

$("#editbox").editable(submitEdit, { 
     indicator : "Saving...",
     tooltip   : "Click to edit...",
     name : "Editable.EmailAddress",
     id   : "elementid",
     type : "text",
     submit  : "<span class=\"mini_button\">Ok</span>",
     cssclass : "edit_text"
});
function submitEdit(value, settings)
{ 
     var edits = new Object();
     var origvalue = this.revert;
     var textbox = this;
     edits[settings.name] = [value];
     var returned = $.ajax({
                        url: "http://someurl.com/edit/", 
                        type: "POST",
                        /*async: false,*/
                        data : edits,
                        dataType : "json",
                        complete : function (XMLHttpRequest, textStatus) 
                                   {
                                       alert("Setting back to original value " +origvalue);
                                       $(textbox).html(origvalue);
                                   }
                     });

      /*var response = $.secureEvalJSON(returned.responseText);
      if (response.errorMsg != '')
      {    
          $("#ajaxNotify").addClass("ajax_error").html(response.errorMsg); 
          return(this.revert);                     
      }*/
      return(value);
 }

また、うまく機能するコメントに同期実装を含めました。サーバー負荷が高いシナリオでは、編集がバックエンドで完了するまでブラウザがロックされます。むしろ、これは値を返し、編集が失敗した場合は後で元に戻します。

ありがとう、

編集

ジッターの提案を試してIE8で動作させた後、ボタンのみをクリックしたときに問題がFFとクロムにあることに気付きました。フィールドをクリックして編集し、Enter キーを押すと、すべて問題ありません。コールバックが発生し、値がリセットされます。

フィールドをクリックして編集し、[OK] ボタンをクリックすると、検証エラーが表示されず、フォームはアクティブなままになり、そこに座ったままになります。その部分が実行されるエラーを受け取った場合、テキスト値は元に戻りますが、フィールドを再度クリックすることはできません.jeditableはバインドされていないようです.

投稿と応答がfirebugで受信されていることを確認できるため、ajaxが起動しています。

{"エラーメッセージ":""}

Enter キーを押すとすべてのブラウザで完全に機能するのに、[OK] ボタンをクリックすると機能しないのはなぜですか? どちらの方法でも同じコードが実行され、ボタンは間違いなくフォームを正しく送信しています。

バインド解除も、ボタンを押したときにのみ発生します。

これらのような jeditable を使用してサーバー側の検証の問題を処理する例はありますか?

4

2 に答える 2

5

単にこれは機能しませんか?

...
complete : function (xhr, textStatus) {
  $.secureEvalJSON(xhr.responseText);
  if (response.errorMsg != '') {
    $("#ajaxNotify").addClass("ajax_error").html(response.errorMsg);
    alert("Setting back to original value " +origvalue);
    $(textbox).html(origvalue);
  }
}
...
于 2009-06-20T12:12:24.567 に答える
0

別の方法があります。jeditable onerror 関数を検討できます。

...
onerror: function(settings, original, xhr) {
  $.secureEvalJSON(xhr.responseText);
  if (response.errorMsg != '') {
    var origvalue = ...;
    $("#ajaxNotify").addClass("ajax_error").html(response.errorMsg);
    console.log("Setting back to original value " + origvalue);
    $(original).html(origvalue);
  }
}
...
于 2011-08-09T17:44:27.443 に答える