所以我有一个包含文本,整数和文件上传字段的多部分表单 我可以对text和int字段使用dataAnnotations和validationMessageFor,但不能用于文件上载。 所以我实现了以下代码来验证文件上传:
$(document).ready(function() {
$("#Error").hide();
var pdfFile = '<%=Model.PdfFile %>';
if (pdfFile == null || pdfFile1 == "") {
$("#Submit").click(function() {
var ext = $('#File').val().split('.').pop().toLowerCase();
var file = $('#File').val();
if ((!file || ext != 'pdf')) {
$('#Error').show();
return false;
}
return true;
});
}
});
这个代码工作得很好,据我所知,但它在检查其他字段之前执行,所以它看起来很草率。 换句话说,如果用户在单击提交时在表单上有多个错误, 将显示文件上载的验证消息,但不会显示其他字段。 如果用户随后上载了有效文件并再次单击“提交”,则会显示其他字段的验证消息。马虎。 所以我也尝试为文本框实现jQuery验证,但由于某种原因,这不起作用:
$(document).ready(function () {
$("#captionVal").hide();
$("#Submit").click(function () {
var caption = $("#Caption").val();
if (!caption || caption == "") {
$("#captionVal").show();
return false;
}
return true;
});
});
它似乎总是将该字段读为null,因此它永远不会返回true。
我尝试添加
$("Caption").change(function() {
以及
$("#Caption").bind(function() {
在if语句前面,但无济于事。
我也尝试过使用jQuery验证
$(document).ready(function () {
$("#term").validate();
});
但这根本没有做任何事情(也许我只是不明白如何使用插件?)
所以我的问题是,如何验证文本框? 我真正需要做的就是确保它们不是空的,如果它们在提交点击时显示错误标签(不是弹出窗口) 或者我如何使用验证插件?我已经下载了.zip文件并添加了(&amp;引用).validate.js文件,但是 .validate方法似乎什么都没做?
答案 0 :(得分:4)
确保您的表单字段具有name属性,并且您要在插件声明期间或通过内置类功能指定验证规则。
此外,您可以将自定义验证方法添加到插件中,并像使用内置的那样使用它:
示例:
<html>
<head>
<script src="path/to/jquery.js">
<script src="path/to/jquery-validator.js">
<script>
// Add a custom method for file validation (going off your logic - haven't tested)
jQuery.validator.addMethod("file", function(value, element) {
var ext = value.split('.').pop().toLowerCase();
return (!value || ext != 'pdf');
}, "Please make sure your file has a valid PDF extension");
// This will make the form pass all validation checks on submit and
// display errors if any occur
$('#myForm').validate();
</script>
</head>
<body>
<form id="myForm">
<input type="text" name="email" class="required email" />
<input type="text" name="username" class="required" />
<input type="text" name="file" class="required file" />
<input type="submit" value="Submit form and get your ass validated!" />
</form>
</body>
</html>
自定义验证方法参考:http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage
编辑:注意到该插件内置了一个文件扩展名验证方法: http://docs.jquery.com/Plugins/Validation/Methods/accept#extension
编辑2:以下是如何在不使用自定义方法的情况下进行验证(使用我刚刚找到的内置方法):
<input type="text" name="file" />
$('#myForm').validate({
rules: {
file: {
required: true,
accept: "pdf"
}
}
});