Javascript jQuery Validate()和Valid()方法未定义或不起作用

Javascript jQuery Validate()和Valid()方法未定义或不起作用,javascript,jquery,asp.net-mvc,validation,Javascript,Jquery,Asp.net Mvc,Validation,我在MVC4项目中使用jQuery验证,使用必要的javascript文件(jQuery-1.9.1.js、jQuery.validate.min.js和jQuery.validate.unobtrusive.min.js)和配置。我想做的是在提交表单之前验证表单。如果表单有效,将调用一个方法,然后提交该方法。如果没有,则不会提交,只会显示一个警报。我遵循了上的步骤和许多类似的主题,尤其是jQuery官方页面。但是不知怎么的,在执行Validate()和Valid()方法时,我遇到了一些错误,比

我在MVC4项目中使用jQuery验证,使用必要的javascript文件(jQuery-1.9.1.jsjQuery.validate.min.jsjQuery.validate.unobtrusive.min.js)和配置。我想做的是在提交表单之前验证表单。如果表单有效,将调用一个方法,然后提交该方法。如果没有,则不会提交,只会显示一个警报。我遵循了上的步骤和许多类似的主题,尤其是jQuery官方页面。但是不知怎么的,在执行Validate()和Valid()方法时,我遇到了一些错误,比如undefined。我认为问题与Validate()方法有关。我尝试了不同类型的jquery-1.x.x.js文件,但结果是一样的。如何使用与下面方法类似的方法验证表单?还是别的什么

script type="text/javascript">
$(function () {
        $("#submitbtn").click(function () {
            var form = $("#myForm");
            form.validate();
            var isValid = form.valid();

            if (isValid) { //If there is no validation error
                alert('form is valid - not submitted');
            } 
            else {
                alert('form is not valid');                               
        }
    });
});

我发现代码工作正常,但是元素的ID不是“myForm”,您是否尝试过确保使用表单的ClientID属性而不是ID

$(function () {
    $("#submitbtn").click(function () {
        var form = $('#<%# myForm.ClientID %>');
        form.validate();
        var isValid = form.valid();
        if (isValid) { //If there is no validation error
            alert('form is valid - not submitted');
        } 
        else {
            alert('form is not valid');                               
        }
    });
});
$(函数(){
$(“#提交”)。单击(函数(){
变量形式=$(“#”);
form.validate();
var isValid=form.valid();
if(isValid){//如果没有验证错误
警报(“表格有效-未提交”);
} 
否则{
警报(“表单无效”);
}
});
});

我相信
$(“#myForm”)
没有像您预期的那样返回元素(例如,由于myForm不存在,它返回null或未定义),因此form.validate()不存在。

您得到的确切错误消息是什么?可能您没有正确引用jquery。
尝试执行一个简单的jquery调用,如
alert($(“#myInput”).val()

非常感谢大家。最后,我成功地将验证方法与上发布的spinner示例结合起来:

查看:


#装载{
显示:无;
位置:固定;
左:0;
排名:0;
宽度:100%;
身高:100%;
背景:rgba(255255,0.8);
z指数:1000;
}
#加载内容{
显示:表格;
位置:固定;
左:0;
排名:0;
宽度:100%;
身高:100%;
}
#装载机{
显示:表格单元格;
垂直对齐:中间对齐;
宽度:100%;
文本对齐:居中;
字体大小:较大;
填充顶部:80px;
}
$(函数(){
//使用jQuery等待长时间运行表单提交的微调器
$(“#提交”)。单击(函数(){
变量形式=$(“#添加形式”);
form.validate();
if(form.valid()){
$(“#加载”).fadeIn();
变量选项={
lines:12,//要绘制的行数
长度:7,//每行的长度
宽度:4,//线条粗细
半径:10,//内圈的半径
颜色:'#000'、//#rgb或#rrggbb
速度:1,每秒//圈
轨迹:60,//余辉百分比
shadow:false,//是否渲染阴影
hwaccel:false//是否使用硬件加速
};
var target=document.getElementById('loading');
var微调器=新微调器(opts)。微调(目标);
}
});
});

等待。。。


您是否在validate()或valid()调用中遇到未定义的错误?如果可能,您是否可以为此创建一个演示JSFIDLE?@jaq316:以下是Firebug上的监视值:@Doktorn:除了屏幕截图外,错误与未找到正确的valid()方法或未执行validate()方法有关。@Rahul Gupta:对不起,但我无法创建JSFIDLE,因为我以前从未使用过它。我试过了,但我无法从我的计算机中添加外部javascript文件,我不确定这是否有错误。我认为您使用了错误的语法,我认为是用于绑定的,我认为是正确的标记,除非使用Razor语法(请参阅:)@user2928044:我尝试使用“#myForm.ClientID”和“#”代替“#myForm”,但这没有任何意义。仍然得到相同的错误表单。validate()>未定义。您的标记是什么,是否确实存在ID为“myForm”的元素(clientID或其他),我假设存在ID为“myForm”的表单元素,该元素也有一个
runat=server
。如果添加
调试器您可能能够计算出表单设置为什么。这与使用jQuery Valid()和Validate()方法同时验证表单有关,而不是单独验证每个元素(我已经可以毫无问题地单独验证它们)。您可能会在上面看到我的代码,并通知我键入代码时是否出错。它不会验证表单上的任何元素。这是一个与使用jQuery Valid()和Validate()方法同时验证整个表单有关的问题。您可能会在上面看到我的代码,并在键入代码时通知我是否有错误。
<style type="text/css">
#loading {
    display: none;
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: rgba(255,255,255,0.8);
    z-index: 1000;
}

#loadingcontent {
    display: table;
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}

#loadingspinner {
    display: table-cell;
    vertical-align: middle;
    width: 100%;
    text-align: center;
    font-size: larger;
    padding-top: 80px;
}
</style>


$(function () {        
    //Waiting spinner for long-running form submits using jQuery
    $("#submitbtn").click(function () {

        var form = $("#addForm");
        form.validate();

        if (form.valid()) {
            $("#loading").fadeIn();
            var opts = {
                lines: 12, // The number of lines to draw
                length: 7, // The length of each line
                width: 4, // The line thickness
                radius: 10, // The radius of the inner circle
                color: '#000', // #rgb or #rrggbb
                speed: 1, // Rounds per second
                trail: 60, // Afterglow percentage
                shadow: false, // Whether to render a shadow
                hwaccel: false // Whether to use hardware acceleration
            };
            var target = document.getElementById('loading');
            var spinner = new Spinner(opts).spin(target);
        }
    });
});


<div id="loading">
    <div id="loadingcontent">
        <p id="loadingspinner">
            Waiting...
        </p>
    </div>
</div>