1

我正在使用 jQuery 验证插件,效果很好。

我希望能够在远程 ajax 失败时显示一条消息并触发一个模式(示例中的alert())。我无法弄清楚如何做到这两点。现在,它按预期触发了 alert(),但还附加了错误消息“请修复此字段”,这应该是我自己的自定义错误消息。

这是我所拥有的:

$("#adresse-form").validate({

        errorElement: "span",

        rules: {

            navn: {
                required: true,
                minlength: 5,
                maxlength: 25
            },
            tlf: {
                required: true,
                digits: true,
                minlength: 8,
                remote: {
                    url: "/ajax/check_tlf",
                    type: "post"
                }
            }
        },

        messages: {

            navn: "Field Name is required",
            tlf: {
                required: "Field tlf is required!",
                remote: function () { // i want to add the message aswell, not just the alert

                    alert("failed - tlf is already taken!");
                }
            }

        },
        submitHandler: function(form) {
            doSomethingGreatOnSuccess();
        },

        errorPlacement: function (error, element) {
            error.appendTo(element.parent());
        }

    });
4

3 回答 3

2

我从来不知道消息可以是一个函数,通常消息是一个字符串。但是,正如您所演示的,消息可以是函数。您没有显示消息的原因是,如果消息是一个函数,它必须返回一个字符串

rules : {...}
messages: 
{
    tlf: 
    {
        required: "Field tlf is required!",
        remote: function (val) 
        {
           alert("failed - " + val + " is already taken!");
           return "remote validation failed";
        }
    }
}
于 2013-02-08T14:41:17.170 回答
2

引用 OP 评论: “返回的字符串每次都有效,但 .reveal()只有在页面加载后第一次触发。”

我认为您只会获得一次模态,因为 Validate 插件仅构造一次消息(然后使用隐藏/显示)。如果您希望每次都触发它,请尝试使用highlight回调函数。与 结合使用onkeyuponfocusout设置为false

onkeyup: false,
onfocusout: false,
highlight: function(element, errorClass) {
   if ($(element).attr('name') === 'remotefieldname') {
       $('#myModal').reveal();
   }
}

演示:http: //jsfiddle.net/NFRvT/1/

于 2013-02-08T15:20:33.453 回答
1

这是我如何让它工作的:

jQuery.validator.addMethod("avail",function(value,element){
    var isSuccess = true;

    $.ajax({
        url: "/avail",
        type: 'POST',
        data: { tlf: value },
        async: false,
        success: function (msg) {
            isSuccess = msg === "true" ? true : false;
            if (!isSuccess) {
                $('#myModal').reveal();
            }
        }
    });
    // return isSuccess;
});

在规则中:

tlf: {
                required: true,
                digits: true,
                minlength: 8,
                avail: true
            }

和消息:

tlf: {
                required: 'Must enter phone number',
                avail: 'Phone number is already taken!'
            },

对于有类似问题的任何人,我在这里找到了很多帮助:https ://stackoverflow.com/a/2628442/839716

于 2013-02-08T16:54:30.370 回答