【问题标题】:Why does my jQuery Validation require 2 clicks to invoke?为什么我的 jQuery 验证需要 2 次点击才能调用?
【发布时间】:2012-05-23 08:06:39
【问题描述】:

我有一个 cmets 表单,其中包含 2 个字段:作者和消息。当我单击提交按钮时,验证不会触发。如果我再次单击提交按钮,则验证有效。知道为什么吗?

//User Clicked Submit Button
$('#CommentsForm').live('submit', function (e) {
    e.preventDefault(); //Prevent Browser from getting new url

    //Validate the comments form
    $('#CommentsForm').validate({
        rules: {
            Author: "required",
            Message: "required"
        },
        messages: {
            Author: "Author is required.",
            Message: "Comment is required."
        },
        errorContainer: "#CommentsErrorBox",
        errorLabelContainer: "#CommentsErrorBox ul",
        wrapper: "li",

        submitHandler: function() {
            //Create JSON object
            var jsonCommentData = {
                ProductID: $('#HiddenProductID').val(),
                Author: $('#Author').val(),
                Message: $('#Message').val()
            };

            //Add the comment.
            $.ajax({
                url: '/Home/_CommentsAdd',
                type: 'POST',
                data: JSON.stringify(jsonCommentData),
                dataType: 'html',
                contentType: 'application/json',

                //The request was a success. Repopulate the div with new result set.
                success: function (data) {
                    $('#AjaxComments').html(data);
                    $('abbr.timeago').timeago(); //update the timestamp with timeago

                    //Change colors of message.                
                    if ($('#CommentStatus').html() == "Your Comment Has Been Added!") {
                        $('#CommentStatus').css('color', 'GREEN');
                    }
                },
                error: function (data) {
                    alert('Fail');
                }
            });
        }
    }); 
});

【问题讨论】:

    标签: jquery asp.net html ajax jquery-ui


    【解决方案1】:

    因为您第一次点击 #CommentsForm 设置了 jQuery 验证:

    $('#CommentsForm').validate({ ... });
    

    因此,任何后续点击都会得到验证。

    修复:

        //setup validation
    var form = $('#CommentsForm');
    
    form.validate({ /* ... setup code .... */ }); 
    
    form.live('submit', function (e) {
        e.preventDefault(); //Prevent Browser from getting new url
    
        $(this).validate();
    
    });
    

    【讨论】:

    • 谢谢。这解决了双击问题。提交表单后如何再次调用验证?例如,假设用户填写了所有字段然后提交表单,在成功提交后用户删除值并尝试再次提交没有值的表单。在这种情况下,验证不像第一次提交那样有效。非常感谢您的帮助。
    • 适当地使用validate 方法和isValid 属性。调用validate 设置isValid 属性 - 这应该让你在路上......
    猜你喜欢
    • 2012-03-19
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多