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 を使用してサーバー側の検証の問題を処理する例はありますか?