我已经开始使用jQuery validate插件了。我在显示错误消息时遇到了一些问题,并希望创建一个测试页面,在那里我可以尝试一些事情。尽管昨天有相同的设置为我工作,我现在收到以下消息:
this[0] is undefined
查看jQuery代码,它在以下部分失败(特定行突出显示):
valid: function() {
if ( $(this[0]).is('form')) {
return this.validate().form();
} else {
var valid = true;
**var validator = $(this[0].form).validate();**
this.each(function() {
valid &= validator.element(this);
});
return valid;
}
}
从查看它,它必须认为我的验证器不是一个表单,但确实如此。真的不明白发生了什么。尝试将 valid()方法的结果打印到控制台时,代码才会失败。到目前为止,这是我的代码。感谢任何帮助。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
th {
text-align: center;
}
.labelCol {
width: 60px;
}
</style>
<script type="text/javascript" src="jquery-1.6.1.full.js"></script>
<script type="text/javascript" src="jquery.validate.full.js"></script>
<script type="text/javascript">
$('#myform').validate({
rules: {
thisval: "required"
}
});
console.info($('#myform').valid());
</script>
</head>
<body>
<form id="myform" name="myform" action="" method="post">
<table>
<tr>
<th colspan="2">Header Section</th>
</tr>
<tr>
<td class="labelCol">This Title</td>
<td class="valueCol">
<input type="text" name="thisval" id="thisval"
maxlength="45" size="45" />
</td>
</tr>
<tr>
<td>
<input type="submit" value="submit" />
</td>
</tr>
</table>
</form>
</body>
</html>
答案 0 :(得分:18)
执行脚本时未加载#myform
表单,因此$('#myform')
与任何内容都不匹配。将脚本包装在就绪事件处理程序中。
<script type="text/javascript">
$(function() { // <-- add this
$('#myform').validate({
rules: {
thisval: "required"
}
});
console.info($('#myform').valid());
});
</script>
答案 1 :(得分:2)
将代码包装在文档就绪功能中,例如:
$(function()
{
$('#myform').validate({
rules: {
thisval: "required"
}
});
console.info($('#myform').valid());
});
答案 2 :(得分:1)
同样发生在这里。对我来说,这是我的代码中的一个错字:
$(document).ready(function(){
//START of validate
$('#reply').validate({
rules:{
message:{
required: true,
},
},
submitHandler: function(form) {
var data = $("#reply").serialize();
$.ajax({
type:"POST",
url:"ajax/scripts/msg_crt.php",
data:data,
success:function(data){
alert("Loaded");
}
});
}
});
//END of validate
});
$(document).on('click','#send', function(){
if($('#replay').valid()){// <--- Here is my selector typo
$("#replay").submit(); // <--- Here is my selector typo
}
return false;
});
答案 3 :(得分:0)
在我的情况下,如果你错过了在表单标签中指定你在validate方法中指定的id,就会发生这种情况。