Javascript jquery验证插件。未使用远程规则删除错误元素(所有操作均不使用远程规则)

Javascript jquery验证插件。未使用远程规则删除错误元素(所有操作均不使用远程规则),javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,检查这把小提琴: 在那里一切正常。它验证字段。检查是否为数字,检查是否为空。如果出现无效错误标签,如果有效则会消失 $("input").each(function () { $(this).rules("add", { required: true, digits: true, messages: { required: 'It is required', digits: 'Only dig

检查这把小提琴:

在那里一切正常。它验证字段。检查是否为数字,检查是否为空。如果出现无效错误标签,如果有效则会消失

$("input").each(function () {
    $(this).rules("add", {
        required: true,
        digits: true,
        messages: {
            required: 'It is required',
            digits: 'Only digits can be there'
        }
    });
});
若我将远程规则添加到规则列表中,则会出现错误标签,但若字段变得有效,则只有类
message
error
会消失,但标签仍会显示(但必须删除)。检查这把小提琴:

使用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.'
        }
    });
});
这是什么

添加
来自远程url的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

这是您需要的吗

我刚刚更改了
.removeClass(errorClass).removeClass('message')

.removeClass(errorClass).remove()


实际上,只要
.remove()
就足够了您的问题在于取消高亮事件,您只是删除类而不是删除标签

替换

   $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass).removeClass('message');


只要
remote
规则从服务器接收到正确的响应,插件就会自动切换消息

如果您的PHP结果需要验证失败,请执行以下操作

echo 'false';
echo 'true';

如果您的PHP结果需要验证才能通过,请执行以下操作

echo 'false';
echo 'true';

:

“通过jQuery.ajax(XMLHttpRequest)调用服务器端资源并获取一个键/值对,该键/值对对应于已验证元素的名称及其作为GET参数的值。响应的计算结果为JSON,对于有效元素,响应必须为
true
,对于无效元素,响应可以为任何
false
undefined
null
,使用默认消息;或者字符串,例如。“该名称已被使用,请尝试使用peter123“显示为错误消息”


不是通过
remote
方法,而是通过
errorPlacement
回调中的代码,您的系统完全崩溃

删除
errorPlacement
回调,或者恢复默认值,至少可以让插件重新工作:


不要用jQuery创建
br
元素来放置
标签
,只需使用
errorElement:“div”
选项,这会将
标签
更改为
div
,它会自然地显示在
输入
下,因为
div
是一个块。这样,您可以完全避免
错误放置
选项

errorElement: "div"

你的手臂有毛病。jQuery验证在我完成之前是完全中断的。更不用说你的
remote
规则在jsiddle中无论如何都不起作用。另外,您需要显示
/inc/json.php?action=get_last_counter_value
函数的
php
代码,或者准确解释它返回的内容。我将在几分钟内编辑我的问题并进行解释。如果您想让jQuery验证插件的
远程
规则正常工作,您需要
echo true
echo false
对其执行操作。。。不打印
。好的,我会编辑我的php代码,谢谢。但检查小提琴,没有php代码。在我的本地机器上也有同样的情况。类
消息
错误
从错误标签元素中移除,但元素未移除。和小提琴上的一样,还能是什么?插件会自动切换错误消息。如果
remote
规则得到
true
响应,则应删除错误标签。没那么复杂。要制作一个简单的演示,请去掉所有选项。。。只需将
.validate()
与规则一起使用,然后再次测试。如果它突然开始工作,你就会知道去哪里找。如果没有,则说明
remote
无法工作。如果必须手动删除标签,则说明插件使用不当@斯帕克,哦,好的。我不知道插件,我只是编辑了fiddle如果你必须手动删除标签,你没有正确使用插件!我编辑了我的php代码,修改了
print$results
回显$result。同样的错误。标签未删除。@SharikovVladislav,我建议您将jQuery Valdiate选项剥离为除了规则之外几乎什么都没有。我只是想简单一点。只要
remote
的响应正确且收到,插件就会自动切换错误消息。同时查看控制台,查看调用
remote
时得到的错误代码。您的意思是删除除规则之外的所有其他代码吗@Sharikovladislav,是的,从
.validate()
中删除所有代码。只应用规则。