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

首先,您不是在发出警报,而是在发出确认。所以改变 window.alert = function() {}; 到 window.confirm = function() {};

然后将其移到提交函数之外,以便在提交发生之前覆盖本机函数。

于 2013-01-15T01:21:48.750 回答
1

jQuery 文档没有提到您可以将函数.trigger作为第二个参数传递,我不相信它确实有效。

如果你只是想发起Ajax请求而不触发.submit,可以直接调用

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

或仅触发使用 jQuery 绑定的事件处理程序.triggerHandler。在这两种情况下,submit都不会生成本机事件,并且不会触发与其他方式绑定的事件处理程序。


正如其他人所说,使用 jQuery 绑定所有事件处理程序而不是使用内联事件处理程序也会改进代码。

于 2013-01-15T01:43:16.443 回答
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 回答