2

我正在尝试编写一个规则来使用远程查找验证多个动态添加的输入。我不知道如何获取远程规则定义中正在验证的字段。例如:

$.validator.addClassRules({
    refDataAcInput: {
        remote: {
            url: "/json/refDataLookup.html",
            type: "get",
            data: {
                groupName: function(a,b,c){
                    //$(this).data("groupName");
                    //THE ABOVE DOESN'T WORK, HERE I WANT TO GET THE VALUE OF THE FIELD BEING VALIDATED
                },
                term: function(a,b,c){
                    //$(this).val();
                    //THE ABOVE DOESN'T WORK, HERE I WANT TO GET THE VALUE OF THE FIELD BEING VALIDATED
                },
                exactMatch: "true"
            },
            dataFilter: function(data, type) {
                return data;
            },
            success: function(data, textStatus, jqXHR) {
                alert(textStatus);
            }
        }
    }
});

我怎样才能做到这一点?

4

1 回答 1

0

我真的很喜欢你的想法,但是你想做的事情不能像现在这样使用 addClassRules 来完成。问题不在于 jQuery Validate,而更多在于 jQuery.ajax 在生成数据时的工作方式。数据对象中的那些函数不使用上下文调用(即,this如您所料那样填充)。jQuery 代码如下所示:

value = jQuery.isFunction( value ) ? value() : value;

我相信这是有道理的,因为 $.ajax 的普遍使用方式,它可以访问局部变量,这样就没有关系(即在调用 $.ajax 之前,您只需创建所需的数据对象)。对于 Validate 的情况,您唯一的选择可能是使用由 提供的数据remote,即输入名称作为键,输入的值作为值(即fieldName:value)并修改您的远程脚本来处理它。

如果因为需要groupName数据而无法选择,则可以考虑编辑源代码。在这种情况下我会做的是改变这一行(github中的L1024):

data[element.name] = value;

对此:

data = $(element).data();
data[element.name] = value;

这会将jQuery.data附加到您的元素的任何值推送到您的 ajax 请求中。

于 2012-05-15T15:50:38.463 回答