检查此提琴: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/
$("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脚本从远程url:
$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
。
只要remote
规则收到服务器的正确响应,插件就会自动切换消息。
如果您的PHP结果需要验证失败,执行以下操作…
echo 'false';
或
echo json_encode('some error message');
如果你的PHP结果需要验证通过,这样做…
echo 'true';
根据文档:
"服务器端资源通过jQuery调用。ajax (XMLHttpRequest)并获取一个键/值对,该键/值对对应于已验证元素的名称及其作为GET参数的值。响应被评估为JSON,对于有效元素必须是
true
,对于无效元素可以是任何false
,undefined
或null
,使用默认消息;或者字符串。"该名称已被占用,请尝试peter123代替"显示为错误消息。"
您的第二个jsFiddle完全被破坏了,不是由remote
方法,而是由errorPlacement
回调中的代码。
删除errorPlacement
回调,或者将其设置为默认值,至少可以使插件再次工作:
而不是用jQuery创建
br
元素来放置label
,只需使用errorElement: "div"
选项,这将把label
变成div
,它将自然地出现在 input
下,因为div
是一个块。这样,您就可以完全避免使用errorPlacement
选项。
errorElement: "div"
这是你需要的吗?http://jsfiddle.net/YHF3b/
我刚刚更改了.removeClass(errorClass).removeClass('message');
to .removeClass(errorClass).remove()
实际上只要.remove()
就足够了
您的问题是在unhighlight事件上,您只是删除了类而不是删除了标签。
代替 $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass).removeClass('message');
$(element.form).find("label[for=" + element.id + "]").remove();