禁用通常在提交时显示的默认警报

时间:2013-01-15 01:11:53

标签: javascript jquery

我正在尝试禁用触发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 个答案:

答案 0 :(得分:2)

由于onsubmit="return confirm(...)"上的<form>属性,系统会显示确认框。如果删除它,则在通过JQuery提交表单时不会出现确认对话框。

如果您在使用$('#myForm').trigger(...)代码提交表单时需要此确认显示 ,请删除window.alert = function() {};行并添加第$('#myForm').submit(function(){ return true; });行你打电话给.trigger()。这将在提交之前删除表单的onsubmit处理程序。

尝试覆盖内置方法(如confirm())通常是一个坏主意,不要再调用它们,这是一个更好的主意。

答案 1 :(得分:1)

首先,你没有发出警报,你正在确认。所以改变 window.alert = function(){}; 至 window.confirm = function(){};

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

答案 2 :(得分:1)

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

如果您只想在不触发.submit的情况下发出Ajax请求,则可以直接拨打电话

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

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


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

答案 3 :(得分: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.

    });