jQuery验证 - 工作,但不提交"

时间:2014-02-15 20:14:13

标签: javascript jquery html5 validation jquery-validate

我有一个表单可以很好地“点亮”验证消息,并在通过验证时将“保存”按钮更改为“正在加载...”。一切都好。

但是,表单永远不会提交。

我想我缺少基本的东西。

    $("#btnSave").on("click", function() {

        if ($("#formMain").valid()) {
            var btn = $(this);
            btn.button('loading');   //This works and fires when the form is valid
            setTimeout(function() {
                btn.button('reset');
            }, 3000);
            $("#formMain").submit();   //FireBug says this is hit, but nothing happens
        }
    });

如果是我的验证器,这里仅供参考:

var CloudFormValidation = function () {


var handleValidation = function() {
    // for more info visit the official plugin documentation: 
    // http://docs.jquery.com/Plugins/Validation

    var form2 = $('#formMain');
    var error2 = $('.alert-danger', form2);
    var success2 = $('.alert-success', form2);

    form2.validate({
        errorElement: 'span', //default input error message container
        errorClass: 'help-block', // default input error message class
        focusInvalid: false, // do not focus the last invalid input
        ignore: "",


        invalidHandler: function(event, validator) { //display error alert on form submit              
            success2.hide();
            error2.show();
            App.scrollTo(error2, -200);
        },

        errorPlacement: function(error, element) { // render error placement for each input type
            var icon = $(element).parent('.input-icon').children('i');
            icon.removeClass('fa-check').addClass("fa-warning");
            icon.attr("data-original-title", error.text()).tooltip({ 'container': 'body' });
        },

        highlight: function(element) { // hightlight error inputs
            $(element)
                .closest('.form-group').addClass('has-error'); // set error class to the control group   
        },

        unhighlight: function(element) { // revert the change done by hightlight

        },

        success: function(label, element) {
            var icon = $(element).parent('.input-icon').children('i');
            $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); // set success class to the control group
            icon.removeClass("fa-warning").addClass("fa-check");
        },

        submitHandler: function(form) {
            success2.show();
            error2.hide();
        }
    });


};




return {
    //main function to initiate the module
    init: function () {
        handleValidation();
    }

};

}();

4 个答案:

答案 0 :(得分:1)

感谢Ostati和John S,你让我在合适的架子上。以下是我所做的改变:

我的提交按钮(只是一个)

    $("#btnSave").on("click", function() {
        $("#formMain").submit();  //Do this here to kick off the process

        if ($("#formMain").valid()) { //If valid the plugin will submit for real
            var btn = $(this);
            btn.button('loading');
            setTimeout(function() { btn.button('reset'); }, 3000);
      }
    });

然后我的提交处理程序:

        submitHandler: function(form) {
            success2.show();
            error2.hide();
            form.submit();  //Must be called here,
        }

答案 1 :(得分:0)

尝试不同的提交机制

$(this).closest("form").submit()

另外,你可以暂时删除setTimeout调用吗?

答案 2 :(得分:0)

我相信您应该使用submitHandler方法提交表单。

你可以尝试:

submitHandler: function(form) {
    $("#btnSave").button('loading');
    setTimeout(function() { $("#btnSave").button('reset'); }, 3000);
    success2.show();
    error2.hide();
    form.submit();
}

然后,如果按钮是提交按钮,则可以删除点击处理程序。如果不是,您可以将其更改为:

$("#btnSave").click(function() {
    $("#formMain").submit();
});

答案 3 :(得分:0)

确保您的按钮设置了type="submit"属性。