javascript - Jquery 验证 submitHandler 没有被调用

标签 javascript jquery jquery-validate

我有一个带有两个按钮的表单

a) 测试 - 单击按钮时调用 javascript 函数来验证几个凭据。

b) 创建 - 单击按钮时调用 javascript 函数来保存表单。 @Messages("playauthenticate.project.create")

我在这两个没有操作的提交按钮周围有一个表单标记。

name、description、accessKey和secretKey是表单中的四个字段。

在单击创建按钮时,我想执行 jquery 验证然后提交表单,但是 jquery 验证 submitHandler 没有在 javascript 函数中被调用并且错误控制台中没有错误。

当我点击创建按钮时,会显示创建警报,然后表单会重置,我能够看到在 URL 中输入的所有参数。

$("create").click(function() {

        alert("create ");

        $('#projectForm').validate( { 
                rules: {
                    name: {
                        minlength: 6,
                        required: true
                    },
                    description: {
                        required: true,
                        description: true
                    },
                    accessKey: {
                        minlength: 10,
                        required: true
                    },
                    secretKey: {
                        minlength: 15,
                        required: true
                    }
                  },
                  focusCleanup: false,

                wrapper: 'div',
                errorElement: 'span',

                highlight: function(element) {
                    $(element).parents ('.control-group').removeClass ('success').addClass('error');
                },
                success: function(element) {
                    $(element).parents ('.control-group').removeClass ('error').addClass('success');
                    $(element).parents ('.controls:not(:has(.clean))').find ('div:last').before ('<div class="clean"></div>');
                },
                errorPlacement: function(error, element) {
                    error.appendTo(element.parents ('.controls'));
                },
                   submitHandler: function() {

                       alert("hello");

                       var name = $('#name').val();
                       var description = $('#description').val();
                       var accessKey = $('#accessKey').val();
                       var secretKey = $('#secretKey').val();

                        var dataString = 'name='+ name + '&description=' + description + '&accessKey=' + accessKey+ '&secretKey=' + secretKey;
                        //alert(dataString);

                        $.ajax({
                          type: "POST",
                          url: "/demo/save",
                          data: dataString,
                          success: function(data) {
                            $('#result').html("<h2>demo created successfully!</h2>");
                           },
                            error: function(data) {
                                $("#result").html("<h2>Error!</h2>");
                            }
                        }) 

                    }
        });
     });

JSfiddle - http://jsfiddle.net/NJxh5/3/ 谢谢

最佳答案

.validate()初始化插件的方法。这不是测试表单的方法。测试是自动的。

因此,去掉 click 处理程序。单击事件由插件自动捕获。如果表单有效,submitHandler 将触发。

否则,您可以通过将 ajax 放置在 submitHandler 回调中来正确执行此操作。

$(document).ready(function () {

    $('#projectForm').validate({ // initialize the plugin
        // rules & options
        submitHandler: function(form) {
            // ajax method
        }
    });

});

工作演示:http://jsfiddle.net/ACdtX/


有两个不同的按钮和 Action :

HTML:

<form id="projectForm">
    ....
    <input type="button" class="button" value="TEST" id="test" />
    <input type="button" class="button" value="Create" id="create" />
</form>

jQuery:

$(document).ready(function () {

    $('.button').each(function () {
        $(this).on('click', function () {
            var action;
            if ($(this).attr('id') == "test") {
                action = 'test.php';
            } else {
                action = 'create.php';
            }
            $('#projectForm').submit();
        });
    });

    $('#projectForm').validate({ // initialize the plugin
        // rules & options
        submitHandler: function(form) {
            // ajax method
            $.ajax({
                url: action, // determined from click handler above
                // ajax options
            });      
        }
    });

});

关于javascript - Jquery 验证 submitHandler 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602789/

相关文章:

javascript - 按住所需的输入类型数字向上和向下箭头以增加跨度和输入文本的功能

javascript - 一遍又一遍地将相同的选项传递给 jQuery 函数

asp.net-mvc - 在 ASP.net MVC 中通过 jQuery 在客户端本地化验证消息

javascript - 加载页面时,jQuery 在更改事件时自动运行函数

javascript - append 与变量值相同数量的 <li>

javascript - Math.random 永远不会生成与其他 Math.random 相同的数字

javascript - 无法使用 RedisStore 和 Node.js 读取属性 'Store'

javascript - 页面加载时从新输入元素获取值

javascript - 当状态为 "paid"时禁用支付按钮

jquery 验证 "minvalue"上的依赖回调?