replaceWith()ドキュメントによると:
.replaceWith() メソッドは、1 回の呼び出しで DOM からコンテンツを削除し、その場所に新しいコンテンツを挿入します。
remove()のドキュメントに従って、要素が削除されると、次のようになります。
要素自体に加えて、要素に関連付けられたすべてのバインドされたイベントと jQuery データが削除されます。
それが送信が実行されていない理由だと思います。
フォームを引き続き送信したい場合は、要素を置き換えた後に手動で送信をトリガーできます。
デモ- ボタン要素を置き換えながらフォームを送信する
読みやすくするために、クリック イベントのバインディングを要素のインラインではなくスクリプトに移動しました。$("form").on("submit")
また、複数のフォームの場合に id を追加しました。これは、代わりに単純にバインドできるため、フォームが 1 つしかない場合は実際には必要ありません。
$("input[name='save']").on("click", function(){
$(this).replaceWith('<img class="submit-form" src=http://www.example.com/images/ajax-loader.gif />');
$("form").submit();
});
$("#myForm").on("submit", function(){
alert("form has been submitted.");
return false;
});
編集 - インラインを使用した同じコードonclick
コードをインラインに移動してonClick
も機能します。
フォームの送信に関しては、$(this)
それが置き換えられる前にボタンになり、後に消えてしまうため、$(this).closest("form").submit()
または使用する他の形式のセレクターは機能し$(this)
ません。
$(this)
を使用するか、$("form").submit()
複数のフォームで のように id を使用する場合は、使用せずに中立的に送信するフォームをターゲットにする必要があります$("#myForm").submit()
。
<form id="myForm" action="http://jsfiddle.net/">
<input class="button" name="save" type="submit" onclick="$(this).replaceWith('<img src=http://www.example.com/images/ajax-loader.gif />'); console.log(this); $('#myForm').submit();" value="SUBMIT">
</form>
デモ- インライン onclick を使用してボタンを置き換えた後、フォームを手動で送信する
補足として、送信イベントがトリガーされる前に画像を表示したい場合は、次のようなちょっとしたトリックを適用できます。
$("input[name='save']").on("click", function(){
$(this).replaceWith('<img class="submit-form" src=http://www.example.com/images/ajax-loader.gif />');
// Makes sure the image is rendered before the submit executes.
window.setTimeout(function(){
$("form").submit();
}, 300);
});
インライン onClick で同じオフコースを適用できます。