jquery验证插件。远程规则未删除错误元素(所有工作都没有远程规则)

时间:2014-03-19 10:16:05

标签: javascript jquery jquery-validate

检查这个小提琴: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/

使用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;

因此,此脚本仅返回truefalse

3 个答案:

答案 0 :(得分:1)

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

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

echo 'false';

OR

echo json_encode('some error message');

如果您的PHP结果需要通过验证,请执行此操作...

echo 'true';

As per documentation

  

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


您的second jsFiddle完全被破坏,不是remote方法,而是errorPlacement回调中的代码。

删除errorPlacement回调或恢复默认值,至少可以让插件再次运行:

http://jsfiddle.net/c5xZL/


不要使用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();