web-dev-qa-db-ja.com

送信ボタンのjquery click()

フォームの送信ボタンに.click()関数があります:

$("#submitId").click(function () {
    $('#hiddenInput').val(someVariable);
});

それは魅力のように機能します。送信ボタンがクリックされると、click()関数が非表示の入力変数を埋めてから、フォーム全体が送信されます。サーバーは、更新されたコンテンツを含む非表示の入力を受け取ります。

私の質問は次のとおりです。常に機能しますか?何らかの理由でまだ知られていないが、最初に送信操作が実行され、後でclick()関数が実行される危険性はありますか?非表示の入力が常に更新されるようにします。

10
iteam

フォームを使用する場合は、alwaysを使用してsubmitボタンを実行することをお勧めします。フォームの送信イベントをトリガー ...次に、submitボタンのformイベントではなく、clicksubmitイベントをリッスンします。

event.preventDefault()を使用して、フォームのデフォルトの送信を禁止し、いくつかのハウスキーピングを実行してから、フォームを送信できます。

$("#submitId").closest('form').on('submit', function(event) {
    event.preventDefault();
    $('#hiddenInput').val(someVariable); //perform some operations
    this.submit(); //now submit the form
});

または単に、

$('form').on('submit', function(event) {
    event.preventDefault();
    $('#hiddenInput').val(someVariable); //perform some operations
    this.submit(); //now submit the form
});
21
PeterKA

このように、値の更新をフォームの送信ハンドラに直接添付するのが最善です

$("#submitId").closest("form").submit(function () {
 $('#hiddenInput').val(someVariable);
});
4
Travis J

個人的には、送信を禁止し、必要な入力値を設定してから、プログラムでフォームを送信する方が安全だと思います。お気に入り:

$("form").submit(function (e) {
    e.preventDefault();
    $('#hiddenInput').val(someVariable);
    $(this).submit();
});
2
CmajSmith