我有以下jQuery代码。
$(document).ready(function() {
$("#testform").validate(function() {
rules: {
firstname: {
minlength: 3,
required: true // error is here?
},
surname: {
minlength: 2,
required: true
},
gender: {
notEqualTo: "select"
}
},
messages: {
firstname: {
required: "Zadejte své jméno",
minlength: "Jméno musí mít délku alespoň 3 znaky"
},
surname: {
required: "Zadejte své příjmení",
minlength: "Jméno musí mít délku alespoň 2 znaky"
},
gender: {
notEqualTo: "Zvolte pohlaví"
}
},
errorContainer: "#errors"
});
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.jsdelivr.net/jquery.validation/1.15.1/jquery.validate.min.js"></script>
&#13;
我的网络控制台显示我,第6行(rules.firstname.required
)上有一些语法错误。我看不到它。我还尝试切换minlength
和required
,但错误仍然停留在同一行。
有人能看到吗?
答案 0 :(得分:4)
您的错误是您将函数传递给validate
:
$("#testform").validate(function() { // <-- here you're passing a function
// ...
})
其中validate
需要一个对象:
$("#testform").validate({ // <-- but you should pass an object
// ...
});
语法错误是在函数表达式上声明对象属性的结果。
$("#testform").validate(function() {
rules: { // <-- (*)
// ...
},
// ...
})
(*)您试图在对象上定义属性,但在函数表达式中声明label statement。
在函数表达式上定义属性是有效的语法,尽管实际上并不是这样。这意味着你要声明一个label statement,它有一个标签和一个正文,恰好在一个函数表达式中:
var x = function() {
rules: {} // label statement with label 'rules' and a body block expression
}
console.log(x.rules); // undefined. Not really useful
嵌套这些标签语句也是有效的:
var x = function() {
rules: { // label statement with label 'rules' and a body block expression
name: 'test' // label statement with label 'name' and a literal expression 'test'
}
}
console.log(x.rules); // undefined
事实上,我们甚至可以自己定义标签声明:
rules: {} // valid syntax for a labeled statement with a label "rules" and a body block expression
错误地假设您要向对象添加属性,一旦添加第二个标签,就会发生语法错误。
更准确地说,问题是,
(Comma Operator),它需要一个表达式,但我们会给它一个带标签的语句:
rules: {}, // label statement with label 'rules' and a body block expression
messages: {} // <-- syntax error: thing before the comma is not an expression
没有,
会消除错误,因为我们只有两个独立的标记语句:
rules: {} // label statement with label 'rules' and a body block expression
messages: {} // label statement with label 'messages' and a body block expression
这就是为什么错误在第6行,因为那是在第一个,
之后。
删除所有逗号将删除语法错误,并留下一堆带标签的语句:
$(document).ready(function(){
$("#testform").validate(function(){
rules: {
firstname: {
minlength: 3
required: true
}
surname: {
minlength: 2
required: true
}
gender: {
notEqualTo: "select"
}
}
messages: {
firstname: {
required: "Zadejte své jméno"
minlength: "Jméno musí mít délku alespoň 3 znaky"
}
surname: {
required: "Zadejte své příjmení"
minlength: "Jméno musí mít délku alespoň 2 znaky"
}
gender: {
notEqualTo: "Zvolte pohlaví"
}
}
errorContainer: "#errors"
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.jsdelivr.net/jquery.validation/1.15.1/jquery.validate.min.js"></script>
当然,这会在您的代码中留下一个错误,因为您将错误的参数传递给validate
,但至少会运行:)