1

onSubmit を起動するデフォルトの確認ボックスを無効にしようとしています。私はしばらくの間試みてきましたが、成功していません。これは私が試したことです...

私のマークアップ

<form method="post" action="special.php" id="myForm" onsubmit="return confirm('Are you sure you ready to submit this order?\n\n')"> 
    //input fields
</form>

マイ JavaScript

$('.excelDL').click(function(){
       $('#myForm').trigger('submit', function(e){
            window.alert = function() {}; //overwrite default alert
            $.post('mail.php', $(this).serialize(), function (data) {})                 
            e.preventDefault();
        });         
});
4

4 に答える 4

2

onsubmit="return confirm(...)"の属性により、確認ボックスが表示されます<form>。これを削除すると、JQueryを介してフォームを送信したときに確認ダイアログが表示されなくなります。

コードを使用してフォームを送信する場合を除いて、この確認を表示する必要がある場合は、を呼び出す前に、行を削除して行を追加してください。これにより、フォームを送信する前にフォームのハンドラーが削除されます。$('#myForm').trigger(...)window.alert = function() {};$('#myForm').submit(function(){ return true; });.trigger()onsubmit

組み込みのメソッド(のような)をオーバーライドしようとするのは一般的に悪い考えconfirm()です。単にそれらを呼び出さない方がはるかに良い考えです。

于 2013-01-15T01:16:06.030 に答える
1

jQueryのドキュメントには、関数を2番目のパラメーターとして渡すことができるとは記載されて.triggerおらず、実際に機能するとは思われません。

トリガーせずにAjaxリクエストを行いたいだけの場合は.submit、直接電話をかけることができます

$.post('mail.php', $('#myForm').serialize(), function (data) {});

または、を使用してjQueryにバインドされたイベントハンドラーのみをトリガーし.triggerHandlerます。どちらの場合も、ネイティブsubmitイベントは生成されず、他の方法でバインドされたイベントハンドラーはトリガーされません。


他の人が言ったように、インラインイベントハンドラーを使用する代わりにjQueryですべてのイベントハンドラーをバインドすると、コードも改善されます。

于 2013-01-15T01:43:16.443 に答える
1

まず、アラートを発行しているのではなく、確認を発行しています。window.alert = function() {}; を変更します。to window.confirm = function() {};

次に、submit 関数の外に移動して、submit が発生する前にネイティブ関数を上書きするようにします。

于 2013-01-15T01:21:48.750 に答える
0

これだけ取り出して

   onsubmit="return confirm('Are you sure you ready to submit this order?\n\n')"

次に、この関数でアラートをいつ使用するかを手動で決定できます

    $('#myForm').trigger('submit', function(e){
        // cal the confirm here , or write your own pop up script that looks the way you want.

    });
于 2013-01-15T01:18:43.850 に答える