AJAX フォームをセットアップし (実際には、さらに別のインプレース編集プラグインを作成しています)、クリック ボタン用の AJAX バインディングをセットアップします。
// Do default submit and cancel options.
$editor.on('click' + namespace, '.ok', function(e) {
console.log('clicked ok');
submit($original);
});
(ここで、$editor はフォームで、$original はその場で編集されるスパン要素です。送信後、もう一度スパン要素を表示する必要があります。フォームには<button>
、タイプsubmit
とクラスの が含まれてい.ok
ます。)
驚いたことに、デフォルトのフォーム アクションは実際には抑制されて.preventDefault()
いました。私は最終的にこれを、AJAX送信ルーチンが最終的に行うという事実にたどり着きました:
$editor.remove();
つまり、フォーム全体を全滅させます。ただし、単に .detach() しても機能するようです。
この動作は信頼できますか? 頼るべきか?フォームが突然消えてしまうと、ブラウザーは通常の方法でフォームを送信できなくなりますか?それとも、イベントをディスパッチする前に情報をキャッシュした可能性がありますか? (これについて何かを述べている Web 標準はありますか?) 一部のブラウザーでは、フォームを足元から一掃するために例外 (またはクラッシュ) が発生する可能性がありますか? もしそうなら、.preventDefault を使用する以外に、これは適切な設計にどのような影響を与えますか?
補遺: 通常はフォームを送信する Enter キーを押すと、実際にはclick
[OK] ボタンのイベントも生成されるようです! それは起こるはずですか?繰り返しますが、Enter キー ハンドラーでフォームを削除すると、クリックが発生しなくなるようです。
問題は、私はプラグインを作成しているため、[OK] ボタンが実際にフォームに接続されない可能性を許容するつもりです。この場合、Enter キーは引き続き機能する必要がありますが、ボタンが存在する場合にフォームを 1 回だけ送信したいのは明らかです...