23

フォームがあり、フォームの送信をインターセプトして、ブートボックスを使用して確認ダイアログを表示したいと思います

  1. ユーザーがデータを入力します
  2. ユーザーヒット送信
  3. 確認ダイアログが表示されます

ユーザーがを押した場合OK、フォームは送信する必要があります。そうでない場合は、ページにとどまる必要があります。

私はこれを試しました:

$('#myForm').submit(function() {
    return bootbox.confirm("Are you sure?");
});

ただし、bootbox.confirm()すぐに戻ると、確認ダイアログは再び非表示になります。

次に、にコールバックパラメータがあることに気付きましたbootbox.confirm()。ただし、$('#myForm').submit()コールバックから呼び出す場合は、明らかに確認ダイアログが再度表示されます。

では、フォームの送信を確認する適切な方法は何ですか?

4

5 に答える 5

44

これは、デフォルトのフォームの動作を防ぐことによってのみ機能しました。以下の解決策があります。これをフォームのリストで使用しています。各フォームには[送信][削除]ボタンがあり、正常に機能します。

<script type="text/javascript">
    $('form').submit(function(e) {
        var currentForm = this;
        e.preventDefault();
        bootbox.confirm("Are you sure?", function(result) {
            if (result) {
                currentForm.submit();
            }
        });
    });
</script>
于 2013-09-20T09:14:18.117 に答える
12

いつものように:あなたが質問をした直後に、あなたは自分で答えを見つけます:-)。この回答を参照してください:https ://stackoverflow.com/a/2420806/219187 (回答のコメントにも注意してください)。

私の問題に適応すると、解決策は次のようになります。

$('#myForm').submit(function() {
    var currentForm = this;
    bootbox.confirm("Are you sure?", function(result) {
        if (result) {
            currentForm.submit();
        }
    });
});
于 2012-07-03T15:03:10.030 に答える
1

このコードは私にとって完璧に機能します...

<script type="text/javascript">
$('#myForm').click(function(e) {
    e.preventDefault();
    var msg = 'Souhaitez vous vraiment supprimer ce produit ?';
    bootbox.confirm(msg, function(result) {
        if (result) {
            $('#myForm').submit();
        }
    });
});
</script>
于 2014-05-06T12:56:11.707 に答える
1

.trigger()メソッドを使用して、送信ハンドラーに追加のパラメーターを渡すことで、これを解決できます。

$('form').submit(function (e, confirmed) {
    var currentForm = $(e.currentTarget);
    if (!confirmed) {
        e.preventDefault();
        bootbox.confirm("Are you sure?", function (result) {
            if (result) {
                currentForm.trigger('submit', { confirmed: true });
            }
        });
    }
});

フォームが最初に送信されたとき、「確認済み」パラメーターは未定義であり、ブートボックスダイアログが表示されます。ユーザーがダイアログでアクションを確認すると、追加のパラメーターを使用して送信イベントが再度トリガーされ、フォームが正常に送信されます。

于 2019-10-11T11:03:06.123 に答える
0

私の解決策

@Html.ActionLink("Delete", "DeleteReport", new { id = item.Id }, new { @class = "btn btn-danger", onclick = String.Format("return ASE.ConfirmAction(this.href, 'Delete {0}?');", item.Name) })
var ASE = {
    ConfirmAction: function (href, text) {
        bootbox.confirm(text, function (result) {
            if (result)
                window.location = href;
        });

        return false;
    }
}
于 2014-08-28T09:42:46.390 に答える