Jquery验证插件。在字段失去焦点之前,消息不可见

时间:2013-03-28 17:07:10

标签: jquery jquery-plugins jquery-validate

我正在使用jquery validate插件。我发现只有在部署我的网站后才会出现这个问题,即便如此,它似乎也是断断续续的。当我提交带有无效字段的表单时,它会阻止提交,但没有一个无效字段显示表明它们无效的消息。如果我将光标放在字段中然后标签出现验证消息。屏幕捕获似乎也会更新显示并导致显示消息。问题出现在多个字段类型上,但这里有一个作为示例。

<input name="ProjectDescription" class="required" id="ProjectDescription" style="text-transform: uppercase;" type="text" maxLength="15" value=""/>

这是我的验证电话。

        $('#RequestForm').validate({
        ignore: ":hidden",
        ignoreTitle: true,
        submitHandler: function () {
            var f = $('#RequestForm');
            var action = '/Request/Request'
            var serializedForm = f.serialize();
            $.post(action, serializedForm,
                function (rtn) {
                    $("#Submit").removeAttr('disabled');
                    if (rtn.Success == true) {
                        var data = rtn.Result;
                        $('form')[0].reset();
                        $.jGrowl("Submitted Successfully", { life: 10000 });
                    }
                    else {
                        $.jGrowl(rtn.ErrorMessage, { sticky: true });
                    }
                });
            $("#Submit").attr('disabled', 'disabled');
            return false;
        },
        invalidHandler: function (event, validator) {
            debugger
            console.log(validator);
        }
    });

我的按钮处理程序

    $('#Submit').click(function () {
        $('#RequestForm').submit();

    });

我无法在小提琴或其他任何地方复制此问题。在编写此请求的过程中,它再次停止发生,但我没有进行任何代码更改。任何可能导致这种行为的帮助将不胜感激。我主要在IE 9中测试

更新

我一直无法找到任何方法来可靠地复制问题,但如果可以,我会继续尝试创建一个小提琴。在同一个浏览会话期间,它将突然开始工作。通常,我可以通过关闭并重新打开浏览器来让行为再次出现3-4次。根据评论,我试图在场上调用模糊和隐藏/显示。这些都不会导致出现错误消息。按下打印屏幕按钮或将光标放在字段中并可靠地按Tab键会显示验证消息。有关该解决方案的一些其他信息:

该页面由MVC 3生成。 我使用javascript和ajax来显示/隐藏字段 字段的显示/隐藏发生在ajax回调中。

此特定字段由

显示/隐藏
                       if (project.PAContractClassID == "CAPITAL") { // capital
                            $('.capitalOnly').show();
                            $('.expenseOnly').hide();
                        }
                        else if (project.PAContractClassID == "EXPENSE") {  // expense
                            $('.expenseOnly').show();
                            $('.capitalOnly').hide();
                        }

我的MVC代码生成字段

@Html.TextBoxFor(m => m.ProjectDescription, new { @name="ProjectDescription", @class = "required", maxlength = "15", style = "text-transform:uppercase;" })           

2 个答案:

答案 0 :(得分:0)

Ditto Sparky:如果你的提交按钮包含在<form></form>中,那么绝对不需要提供点击处理函数来提交表格。

如果您没有使用提交按钮,而只使用type=button,请尝试使用type=submit并查看问题是否消失。

答案 1 :(得分:0)

经过大量测试后,我在我的_Layout.cshtml中隔离了对jquery.unobtrusive-ajax的引用,因为它干扰了jquery validate的行为。删除对jquery.unobtrusive-ajax的引用后,我没有再次收到错误。我将继续进行一些测试,看看我添加这些引用的顺序是否有所不同,但我不想让问题无法回答。谢谢大家的建议。