【问题标题】:Combine Validation (js), submit (php) and modal (bootstrap) in form在表单中结合 Validation (js)、submit (php) 和 modal (bootstrap)
【发布时间】:2012-12-15 21:49:50
【问题描述】:

我正在使用 Bootstrap 创建一个简单的联系表单,并希望在按下“提交”按钮时实现以下目标:

  • 使用 jQuery 验证表单字段
  • 如果验证通过,则使用 PHP 作为处理器提交表单
  • 在 Bootstrap 模式对话框中显示一条消息,说明表单已通过电子邮件发送

知道我的 PHP 和 JS 知识低于平均水平,我很高兴地说我已经能够使所有项目单独工作,但我无法将它们组合在一起......

你能给我一些意见吗?

验证用途:

var validator = $("#contact").validate({
  ...

PHP 使用:

mail()

当使用这样的按钮提交表单时,两者都可以工作:

<button type="submit" name="submit" id="submitButton" class="btn btn-bcome pull-right">Send</button>

为了激活对话框,我将按钮更改为:

<button href="#submit" role="button" button type="submit" name="submit" id="submitButton" class="btn btn-bcome pull-right" data-toggle="modal">Send</button>

这会使模态正确显示,但不会发生验证和提交。

我找到了一个相关的帖子: jQuery Modal that appears on form submit。 但我不知道要专门针对我的情况进行调整。


我已经尝试适应你告诉我的内容,这就是我得到的: html部分:

button href="#submit" role="button" button type="submit" name="submit" id="submitButton" class="btn btn-bcome pull-right" data-toggle="modal">Envoyer</button>

<div id="submit" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Thanks for your mail</h3>
      </div>
      <div class="modal-body">
        <p>We will get back to you soon</p>
      </div>
      <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
      </div>
    </div>

在我的 JS 文件中:

var $validator = {};

$(document).ready(function()
{
    // validate signup form on keyup and submit
    var validator = $("#contact").validate({
       submitHandler: function(form)
        {
            //code to submit your form here
            //code to open your modal here
        errorClass:'error',
        validClass:'success',
        errorElement:'span',
        highlight: function (element, errorClass, validClass) { 
            $(element).parents("div[class='clearfix']").addClass(errorClass).removeClass(validClass);
        }, 
        unhighlight: function (element, errorClass, validClass) { 
            $(element).parents(".error").removeClass(errorClass).addClass(validClass); 
        },
        rules: {
            fname: {
                required: true,
                minlength: 2
            },
            name: {
                required: true,
                minlength: 2
            },
            email: {
                required: true,
                email: true
            },
            message: {
                required: true,
                minlength: 10
            }
        },
        messages: {
            fname: {
                required: '<span class="help-inline">First name.</span>',
                minlength: jQuery.format('<span class="help-inline">2 chars</span>')
            },
            name: {
                required: '<span class="help-inline">Name.</span>',
                minlength: jQuery.format('<span class="help-inline">2 chars</span>')
            },
            email: {
                required: '<span class="help-inline">Email.</span>',
                email: '<span class="help-inline">Ex : name@exemple.com</span>'
            },
            message: {
                required: '<span class="help-block">Message</span>',
                minlength: jQuery.format('<span class="help-block">10 chars</span>')

        $('form').submit(function() {
            if ($validator.numberOfInvalids() > 0) {
                $('#submit').modal('hide');
            } else {
                $('#submit').modal('show');
            }
        }
    });
}
);

我肯定遗漏了一些东西,但目前只执行模式部分,而不是验证部分或提交表单部分。

知道我应该怎么做才能完成这项工作吗?

【问题讨论】:

    标签: php javascript jquery validation twitter-bootstrap


    【解决方案1】:

    如果您使用的是 bassastance 的 jquery 验证插件,您正在寻找 submitHandler 选项,它在此处定义:http://docs.jquery.com/Plugins/Validation/validate#toptions

    $(document).ready(function()
        {
            // validate signup form on keyup and submit
            var validator = $("#contact").validate({
               submitHandler: function(form)
                {
                    //code to submit your form here
                    //code to open your modal here
                }
            });
        }
    );
    

    更新:我正在根据 Fred 提供的进一步代码更新此答案。

    Javascript:

    var $validator; //declared for further use later
    
    $(document).ready(function()
    {
        // validate signup form on keyup and submit
        $validator = $("#contact").validate({
            errorClass:'error',
            validClass:'success',
            errorElement:'span',
            highlight: function (element, errorClass, validClass) { 
                $(element).parents("div[class='clearfix']").addClass(errorClass).removeClass(validClass);
            }, 
            unhighlight: function (element, errorClass, validClass) { 
                $(element).parents(".error").removeClass(errorClass).addClass(validClass); 
            },
            rules: {
                fname: {
                    required: true,
                    minlength: 2
                },
                name: {
                    required: true,
                    minlength: 2
                },
                email: {
                    required: true,
                    email: true
                },
                message: {
                    required: true,
                    minlength: 10
                }
            },
            messages: {
                fname: {
                    required: '<span class="help-inline">First name.</span>',
                    minlength: jQuery.format('<span class="help-inline">2 chars</span>')
                },
                name: {
                    required: '<span class="help-inline">Name.</span>',
                    minlength: jQuery.format('<span class="help-inline">2 chars</span>')
                },
                email: {
                    required: '<span class="help-inline">Email.</span>',
                    email: '<span class="help-inline">Ex : name@exemple.com</span>'
                },
                message: {
                    required: '<span class="help-block">Message</span>',
                    minlength: jQuery.format('<span class="help-block">10 chars</span>')
                }
            },
            submitHandler: function(form) //submitHandler is an option taken by the validate function
            {
                //i put your submission code in here
    
                $('form').submit(function() {
                    if ($validator.numberOfInvalids() > 0) 
                    {
                        $('#submit').modal('hide');
                    } else 
                    {
                        $('#submit').modal('show');
                    }
                });
            }
        });
    });
    

    【讨论】:

    • 您好 trismi,感谢您的意见!我已经尝试适应你告诉我的内容,这就是我得到的:
    • 嗨 Fred,看起来您将我的代码放在了函数数组中的元素之前,但它实际上应该是该数组的一部分。我将更新我的答案以包含您的“固定”代码,但不确定它是否会起作用,因为我不确定您将什么用于模态。您是否在网上某个地方发布了此内容,您可以给我发个链接?
    • 您好 trismi,感谢您对我的帮助!我尝试了您的代码,但提交按钮既不发送电子邮件也不显示模式窗口。我知道如果您能看到我在做什么,可能会更容易提供帮助。因此,您可以访问以下站点:test(.)hennequin(.)webfactional(.)com/contact-modal.php。再次感谢您的宝贵帮助!!!
    • 嗨 Fred- 看起来在生成的 HTML 的第 92 行,您有一个脚本标签,其中有一个抛出错误的段落。除此之外,当我单击“提交”时,我收到一条错误消息,指出“对象对象没有模式方法”,其中对象是 $("#submit") 元素。这意味着您可能需要添加一些其他 javascript 以将该对象与您尝试使用的模态方法相关联。另外,你有我可以联系你的电子邮件吗?我不认为论坛是用来调试的。
    • Trismi,我显然遇到了 php 环境问题。我已经开始了一个新的环境,并根据您的示例和输入以及来自 github (github.com/wsfulmer/bootstrap-contact/blob/master/contact.php) 的另一个示例,我设法解决了脚本标记错误并使其正常工作!再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 2022-01-04
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多