JQuery用のJEditableプラグインを使用していましたが、プラグインにエラーを返して以前の値に戻し、エラーを表示するようにしたいと考えています。私はこれを同期ajax呼び出しを使用して作業しているが、代わりに非同期コールバックを使用することをお勧めします。私が遠くに持っているコードは以下の通りです。Jeditable非同期復帰時のエラー
$("#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);
}
私は、よく動作するコメントに私の同期実装を含めました。サーバーの負荷が高い状況では、編集がバックエンドで終了するまでブラウザをロックします。 IDはむしろ値を返し、編集が失敗した場合は後で戻します。
おかげで、
EDIT
は、ジッタの提案をしようと、それはIE8で働いて取得した後、私はボタンのみをクリックすると、問題はFFとクロムと気づきました。フィールドをクリックして編集してEnterキーを押すとすべてが正常です。コールバックが発生し、値がリセットされます。
フィールドをクリックして編集し、[OK]ボタンをクリックしても、検証エラーが表示されない場合、フォームはアクティブのままで、そこにのみ置かれます。その部分が実行されるエラーが受信された場合、テキスト値は元に戻されますが、そのフィールドを再度クリックすることはできません.jeditableはアンバインドされているようです。
ポストとレスポンスがファイアバグで受信されているため、ajaxが発砲していることが確認できます。
{「errorMsg内容」:「」}
私は、[OK]ボタンをクリックすると、入力しなく押した場合は、なぜこの作品は、すべてのブラウザで完璧ですか?どちらの方法でも同じコードが実行され、ボタンがフォームを正しく送信しています。
アンバインドされているものは、ボタンを押しただけでも発生します。
誰もjeditableを使用してこれらのようなサーバー側の検証の問題を処理する例はありますか?
私はその解決策を5回試してみましたが、今は動作しませんでした。私がFireBugのコールバックの最後の行にブレークポイントを置くと、それが詰まるようです。デバッグしようとして私はそれを壊した!私は何が起こっていたのか分からなかった。ああ、私のばかげたことを指摘してくれてありがとう。 – madcapnmckay
@madcapnmckayはあなたが「heisenbug」と呼ぶものですか?ところで、素晴らしい情報;-) –