6

我正在对表单使用 jQuery 验证,但是当表单被验证时,它会重新加载或提交我想停止该操作的页面。我已经使用了 event.preventDefault(),但它不起作用。

这是我的代码:

$("#step1form").validate();
$("#step1form").on("submit", function(e){
    var isValid = $("#step1form").valid();

    if(isValid){
        e.preventDefault();
        // Things i would like to do after validation
        $(".first_step_form").fadeOut();
        if(counter == 3){
            $(".second_step_summary").fadeIn();
            $(".third_step_form").fadeIn();
            $(".third_inactive").fadeOut();
        }else if(counter < 3){
            $(".second_step_form").fadeIn();
            $(".third_inactive").fadeIn();
        }

        $(".first_step_summary").fadeIn();
        $(".second_inactive").fadeOut();
    }

    return false;
});
4

3 回答 3

10

submitHandler是插件内置的回调函数。

submitHandler(默认:原生表单提交):

表单有效时处理实际提交的回调。获取表单作为唯一参数。替换默认提交。验证后通过 Ajax 提交表单的正确位置。

由于submitHandler自动捕获提交按钮的单击并且仅在有效表单上触发,因此您不需要另一个提交处理程序,也不需要用于valid()测试表单。

您的代码可以替换为:

$("#step1form").validate({
    submitHandler: function(form) {
        // Things I would like to do after validation
        $(".first_step_form").fadeOut();
        if(counter == 3){
            $(".second_step_summary").fadeIn();
            $(".third_step_form").fadeIn();
            $(".third_inactive").fadeOut();
        }else if(counter < 3){
            $(".second_step_form").fadeIn();
            $(".third_inactive").fadeIn();
        }
        $(".first_step_summary").fadeIn();
        $(".second_inactive").fadeOut();
        return false;  // block the default submit action
    }
});
于 2013-07-24T16:09:29.957 回答
8

我将这个基本结构用于我的所有 JS 验证,它可以满足您的要求

$('#form').on('submit', function() {
    // check validation
    if (some_value != "valid") {
        return false;
    }
});

你不需要e.preventDefault();和一个return false;声明,他们做同样的事情。

于 2013-07-24T08:20:30.263 回答
1

该插件为有效和无效的表单提交尝试提供回调。如果您提供 submitHandler 回调,则表单不会自动提交到服务器。

$("#step1form").validate({
   submitHandler : function()
   {
        // the form is valid 
        $(".first_step_form").fadeOut();
        if(counter == 3){
            $(".second_step_summary").fadeIn();
            // etc
        }
   }
});
于 2013-07-24T10:48:11.713 回答