检查这个小提琴:http://jsfiddle.net/8b32e/
那里一切正常。它验证字段。检查是否有数字,检查是否为空。如果出现无效的错误标签,如果有效则会消失。
$("input").each(function () {
$(this).rules("add", {
required: true,
digits: true,
messages: {
required: 'It is required',
digits: 'Only digits can be there'
}
});
});
如果我将远程规则添加到规则列表,则会出现错误标签,但如果字段生效,则只有类message
和error
正在消失,但标签仍然显示(但必须删除) 。检查这个小提琴:http://jsfiddle.net/2LRv7/7/
使用remoute阻止规则:
$("input").each(function () {
var fieldName = $(this).attr('name');
$(this).rules("add", {
required: true,
digits: true,
remote: {
url: "/inc/json.php?action=get_last_counter_value",
type: "post",
data: {
id: fieldName
}
},
messages: {
required: 'It is required',
digits: 'Only digits can be there',
remote: 'Fix this please.'
}
});
});
这是什么?
添加:
来自远程网址的php脚本:
$DBH = connectToDatabase();
$user_id = $_SESSION['OplataUser_ID'];
$counter_id = $_POST['id'];
$newValue = $_POST["".$counter_id.""];
$params = array();
$params['user_id'] = $user_id;
$params['counter_id'] = $counter_id;
$STH = $DBH->prepare("
SELECT CounterValue as Value FROM CounterValues
WHERE
UserID = :user_id
AND
UserCounterID = :counter_id
ORDER BY
DateCreate
DESC
LIMIT 1
");
$STH->execute($params);
$lastValue = $STH->fetch(PDO::FETCH_OBJ)->Value;
if($lastValue > $newValue)
{ $result = "false"; }
else
{ $result = "true"; }
print $result;
$DBH = null;
因此,此脚本仅返回true
或false
。
答案 0 :(得分:1)
只要remote
规则从服务器收到正确的响应,插件就会自动切换消息。
如果您的PHP结果需要验证失败,请执行此操作...
echo 'false';
OR
echo json_encode('some error message');
如果您的PHP结果需要通过验证,请执行此操作...
echo 'true';
"服务器端资源通过jQuery.ajax(XMLHttpRequest)调用,并获取与验证元素名称对应的键/值对及其值作为GET参数。响应被评估为JSON,对于有效元素必须为
true
,对于无效元素,可以使用默认消息为false
,undefined
或null
;或者一个字符串,例如。 "该名称已被采用,请尝试使用peter123"显示为错误消息。"
您的second jsFiddle完全被破坏,不是remote
方法,而是errorPlacement
回调中的代码。
删除errorPlacement
回调或恢复默认值,至少可以让插件再次运行:
不要使用jQuery创建br
元素来放置label
,而只需使用errorElement: "div"
选项,这会将label
更改为div
和它会自然地出现在<{em> input
下,因为div
是一个块。这样,您就可以完全避免使用errorPlacement
选项。
errorElement: "div"
答案 1 :(得分:0)
这是你需要的吗? http://jsfiddle.net/YHF3b/
我刚刚更改了.removeClass(errorClass).removeClass('message');
到.removeClass(errorClass).remove()
实际上只需.remove()
就足够了
答案 2 :(得分:0)
您的问题出在unhighlight事件上,您只是删除了类而不是删除标签。
替换
$(element.form).find("label[for=" + element.id + "]").removeClass(errorClass).removeClass('message');
与
$(element.form).find("label[for=" + element.id + "]").remove();