提交前确认表单

47

我正在使用一个简单的表单,我想允许用户在提交表单前确认... 我知道使用jQuery很容易实现,但是我对代码有点困惑...

$(function() {
  $(".testform").submit(function() {
    $('.submitbtn').text('confirm');
  });
});

我知道上面的代码还不完整,我想请你帮忙完成它,这样它就能用jQuery alert弹出一个提示,内容是“请确认一切是否正确”,并将提交按钮上的文本从“提交”更改为“确认”。如果用户再次点击确认,则会提交表单。希望我的意思清楚了,谢谢。


3
你想要一个警报,还是改变提交按钮的文本? - Dogbert
这里还有其他示例:http://stackoverflow.com/questions/8541821/how-to-simplify-my-statefull-interlaced-modal-dialogs-in-asp-net-mvc - user1660934
最佳解决方案:https://dev59.com/MWw15IYBdhLWcg3wmM19#6515632 - Grigory Kislin
10个回答

122
$('#myForm').submit(function() {
    var c = confirm("Click OK to continue?");
    return c; //you can just return c because it will be true or false
});

这比我的解决方案更好。 - nikhil
你能让confirm()与JQuery dialog-confirm一起工作吗?看看这个:http://stackoverflow.com/a/17037698/3175526 - JoshYates1980
1
请注意,在新的jQuery版本中,防止默认操作的首选方法是e.preventDefault()而不是在事件处理程序中返回false,因为return false同时执行了太多的操作。 - vinczemarton
看到这个之后,我尝试了<form method="post" onsubmit="return confirm('确定?')">,结果竟然奏效了。为什么这不是解决方法之一呢?这个方法难道不能和method="get"或者其他浏览器兼容吗? - tanmay_garg

25

示例代码: http://jsfiddle.net/z68VD/

HTML:

<form id="uguu" action="http://google.ca">
    <input type="submit" value="text 1" />
</form>

jquery:

$("#uguu").submit(function() {
    if ($("input[type='submit']").val() == "text 1") {
        alert("Please confirm if everything is correct");
        $("input[type='submit']").val("text 2");
        return false;
    }
});

谢谢Kei的回答,我认为这段代码将解决我的问题。还有一件事,我的表单很长,所以在警告后我能否将用户发送到页面顶部。 - seoppc

19

以下是我会用来达成你的目标的方法:

$(document).ready(function() {
    $(".testform").click(function(event) {
        if( !confirm('Are you sure that you want to submit the form') ) 
            event.preventDefault();
    });
});

简单解释一下这段代码的运行方式, 当用户点击按钮时,会弹出确认对话框,如果用户选择了“否”,则默认操作即提交表单不会继续进行。 在用户确认后,控制权转移到浏览器,继续提交表单。我们使用了标准的JavaScript确认对话框。


13

HTML

<input type="submit" id="submit" name="submit" value="save" />

JQUERY

$(document).ready(function() {
    $("#submit").click(function(event) {
        if( !confirm('Are you sure that you want to submit the form') ){
            event.preventDefault();
        } 

    });
});

7

Simply...

  $('#myForm').submit(function() {
   return confirm("Click OK to continue?");
  });

或者

  $('#myForm').submit(function() {
   var status = confirm("Click OK to continue?");
   if(status == false){
   return false;
   }
   else{
   return true; 
   }
  });

6
<body> 
    <form method="post">
        name<input type="text" name="text">
        <input type="submit" value="submit" onclick="return confirm('Are you sure you want to Save?')">
    </form>
</body>

1
这是最简单的答案。我不知道为什么评分那么低。 - Dan Hoover

5
基于 easy-confirm-plugin,我完成了以下内容:
(function($) {
    $.postconfirm = {};
    $.postconfirm.locales = {};
    $.postconfirm.locales.ptBR = {
        title: 'Esta certo disto?',
        text: 'Esta certo que quer realmente ?',
        button: ['Cancela', 'Confirma'],
        closeText: 'fecha'
    };
    $.fn.postconfirm = function(options) {
        var options = jQuery.extend({
            eventType: 'click',
            icon: 'help'
        }, options);
        var locale = jQuery.extend({}, $.postconfirm.locales.ptBR, options.locale);
        var type = options.eventType;
        return this.each(function() {
            var target = this;
            var $target = jQuery(target);
            var getDlgDv = function() {
                var dlger = (options.dialog === undefined || typeof(options.dialog) != 'object');
                var dlgdv = $('<div class="dialog confirm">' + locale.text + '</div>');         
                return dlger ? dlgdv : options.dialog;          
            }           
            var dialog = getDlgDv();
            var handler = function(event) {
                    $(dialog).dialog('open');
                    event.stopImmediatePropagation();
                    event.preventDefault();
                    return false;
            };
            var init = function() 
            {
                $target.bind(type, handler); 
            };
            var buttons = {};
            buttons[locale.button[0]] = function() { $(dialog).dialog("close"); };
            buttons[locale.button[1]] = function() {
                $(dialog).dialog("close");
                alert('1');
                $target.unbind(type, handler);
                $target.click();
                $target.attr("disabled", true);
            };            
            $(dialog).dialog({
                autoOpen: false,
                resizable: false,
                draggable: true,
                closeOnEscape: true,
                width: 'auto',
                minHeight: 120,
                maxHeight: 200,
                buttons: buttons,
                title: locale.title,
                closeText: locale.closeText,
                modal: true
            });
            init();
        });
        var _attr = $.fn.attr;
        $.fn.attr = function(attr, value) {
            var returned = _attr.apply(this, arguments);
            if (attr == 'title' && returned === undefined) 
            {
                returned = '';
            }
            return returned;
        };
    };
})(jQuery);

你只需要以这种方式调用:
    <script type="text/javascript">     
        $(document).ready(function () {
            $(".mybuttonselector").postconfirm({ locale: {
                        title: 'title',
                        text: 'message',
                        button: ['bt_0', 'bt_1'],
                        closeText: 'X'
                    }
                });
        });
    </script>

1
$('.testform').submit(function() {
  if ($(this).data('first-submit')) {
    return true;
  } else {
    $(this).find('.submitbtn').val('Confirm').data('first-submit', true);
    return false;
  }
});

这只是我养成的一种习惯。这是一种与特定DOM元素相关联的存储信息的简单方法。在这种情况下,是表单。这意味着您可以轻松地将“.testform”替换为返回表单的任何其他选择器,并且该代码将独立地适用于每个表单。 - Michael Mior

0
单行:
<form action="url" method="POST" onsubmit="event.preventDefault();if(confirm('Save this?'){this.submit();};">
    <button type="submit">Save</button>
</form>

-2
var r = confirm('Want to delete ?'); 

if (r == true) { 
    $('#admin-category-destroy').submit(); 
}

1
这个答案并没有额外提供任何还未在此处涵盖的内容。 - Blue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接