Jquery验证插件.没有使用远程规则删除错误元素(所有元素都可以在没有远程规则的情况下工作)

jquery validation plugin. error element is not being removed with remote rule (all working without remote rule)

本文关键字:程规则 规则 都可以 元素 情况下 工作 错误元素 Jquery 插件 验证 删除      更新时间:2023-09-26

检查此提琴: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'
        }
    });
});

如果我将远程规则添加到规则列表,出现错误标签,但如果字段有效,只有类messageerror消失,但标签仍然显示(但必须删除)。检查此提琴:http://jsfiddle.net/2LRv7/7/

带有remote: 规则的块
$("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;

所以这个脚本只返回truefalse

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

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

echo 'false';

echo json_encode('some error message');

如果你的PHP结果需要验证通过,这样做…

echo 'true';

根据文档:

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


您的第二个jsFiddle完全被破坏了,不是由remote方法,而是由errorPlacement回调中的代码。

删除errorPlacement回调,或者将其设置为默认值,至少可以使插件再次工作:

http://jsfiddle.net/c5xZL/


而不是用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();