JQuery Validation Plugin:如何让它重新验证

时间:2010-08-20 04:30:12

标签: javascript jquery validation forms

网站:http://tinyurl.com/358lh6a

无论如何,无论何时更改 DomainSelect (域名扩展名),我都想重新验证宫殿地址(他们想要的域名,名称)。

我尝试了一个简单的方法:

<select id=DomainSelect name=DomainSelect onChange="$('#Register').validate().element('#Name');">

虽然没用。我不确定.element是否实际重新验证了表单元素,或者只返回true或false。

此外,应该注意的是,当Package更改时,DomainSelect会被完全删除并输入新值(这可能会弄乱某些内容)。如果可以建议另一种方式,比如某种隐藏。

编辑:

查看插件的来源,我看一下远程功能:

remote: function(value, element, param) {
            if ( this.optional(element) )
                return "dependency-mismatch";

            var previous = this.previousValue(element);
            if (!this.settings.messages[element.name] )
                this.settings.messages[element.name] = {};
            previous.originalMessage = this.settings.messages[element.name].remote;
            this.settings.messages[element.name].remote = previous.message;

            param = typeof param == "string" && {url:param} || param; 

            if ( previous.old !== value ) {

这里的重要部分是 previous.old!== value 。由于我实际上只是在验证#Name,并在HTTP POST中向#DomainSelect投掷...... #Name值永远不会改变,因此函数doest触发。'

我可以解决这个问题的一种方法是创建一个隐藏的输入来连接#Name&amp; #DomainSelect在一起然后验证,那样值会改变。除非别人想出更好的主意。另一种选择是使用我自己的方法,但是我已经为Http请求编写了不必要的代码等等。

编辑:我决定尝试创建一个隐藏的输入,它接受两个输入的值,然后验证它。代码很混乱:

<input name=Name id=Name size=17 onKeyUp="$('#NameDomainSelect').val(   $('#Name').val() + $('#DomainSelect').val()     );$('#NameDomainSelect').valid();">
<select id=DomainSelect name=DomainSelect onChange="$('#NameDomainSelect').val( $('#Name').val() + $('#DomainSelect').val()     );$('#NameDomainSelect').valid();">

名称是子域名, DomainSelect 是域名本身。然后 NameDomainSelect 同时连接了Name和DomainSelect。然后我必须为NameDomainSelect定义一个规则并稍微修改我的PHP。但是,现在它显示了2个复选标记,因为它验证了Name(对于required)和NameDomainSelect ......叹息......

所以我决定作为一种解决方法,直到有人告诉我否则修改validate的远程函数以接受数组作为参数。 0元素是一个字符串,指向要包含的表单值,在本例中为DomainSelect ...和1个元素,该对象是ajax请求的正常对象。

if (!param[0] == "") value = value + $("#" + param[0]).val();
...
param = typeof param[1] == "string" && {url:param[1]} || param[1]; 

对于我不需要2个值依赖的远程调用,我只需将0元素设置为“”。

1 个答案:

答案 0 :(得分:3)

尝试:

<select id="DomainSelect" name="DomainSelect" onChange="$('#Name').valid();">

如果不能正常工作,我会建议您按照之前的说法添加另一种自定义方法...