我正在尝试使用jqueryvalidation.org plugin.
这是我的jQuery代码:
$("#title").rules("add", {
"remote": {
url: checkTitleAvailable.php, // echoes "true" or "false"
type: "post",
data: {
proposedSeoTitle:function() {
return $('#title').val();
}
},
complete: function(response) {
if (response.responseText != "true" && response.responseText != "false") {
alert("unexpected response " + response.responseText);
}
return response;
}
},
"messages": {"remote": "That title already exists"}
});
('title'是输入字段,id =“title”class =“required”)
我收到错误消息:
“未捕获的TypeError:无法调用未定义的方法'调用'。”
"messages"
被视为另一条规则,但没有运行的功能。然而它仍然被视为一条消息,并且往往会弹出它,但错误会使整个系统无法使用 - 在保存之前无法验证整个页面。
我做错了什么,或者这是Validation插件中的错误?有一些解决方法吗?我是否应该破解插件以使其正常工作?
答案 0 :(得分:1)
引用OP:
'title'是
的输入字段id="title" class="required"
即使您使用.rules('add')
方法在字段上声明规则,插件仍然要求每个输入字段都有(唯一)name
属性。这是插件跟踪输入的方式。
请参阅Reference Docs page ...
的标记建议部分输入元素的name属性是'required',如果没有它,验证插件就无法工作。
您的代码:
"remote": {
url: checkTitleAvailable.php, // echoes "true" or "false"
type: "post",
data: {
proposedSeoTitle:function() {
return $('#title').val();
}
},
complete: function(response) {
if (response.responseText != "true" && response.responseText != "false") {
alert("unexpected response " + response.responseText);
}
return response;
}
}
我不确定你在这里使用complete
回调试图做什么。插件的remote
规则会自动评估服务器的响应,但您还在评估响应是否为布尔值并返回响应。
As per the documentation,remote
方法正在为经过验证的字段查找true
。或者,当服务器响应为false
,undefined
,null
或字符串时,它将被评估为无效字段,其中字符串本身会覆盖默认错误消息。鉴于插件已经评估了服务器响应,您永远不需要使用complete
回调手动评估响应。否则,您也可以从头开始编写自己的remote
方法,而不是使用插件中的方法。
通过jQuery.ajax(XMLHttpRequest)调用serverside资源 获取与已验证的名称对应的键/值对 元素及其作为GET参数的值。 响应评估为 JSON,对于有效元素必须为
true
,并且可以是任何false
, 使用默认消息,undefined
或null
表示无效元素;要么 一个字符串,例如。 “这个名字已经被采用,请尝试peter123” 显示为错误消息。
删除complete
回调,看看会发生什么。
remote: { // <-- quotation marks not required.
url: checkTitleAvailable.php, // echoes "true" or "false"
type: "post",
data: {
proposedSeoTitle:function() {
return $('#title').val();
}
}
},
messages: { // <-- quotation marks not required.
// quotation marks not required around `remote`.
remote: "That title already exists"
}
BTW - rules
周围的引号,messages
和其他选项不是必需的。