2010-08-20 74 views
1

网站:http://tinyurl.com/358lh6ajQuery验证插件:如何获得它重新验证

我要重新验证宫殿地址(他们是想域,形式为:名称)每当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 ==价值!由于我真的只验证#Name,并且在HTTP POST中沿着#DomainSelect抛出...... #Name值永远不会改变,所以函数会触发。

我可以解决这个问题的一种方法是创建一个隐藏的输入,将#Name & #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是名称和DomainSelect连接。然后我必须为NameDomainSelect定义一个规则并修改我的PHP。然而,现在它显示2复选标记,因为它验证名称(对于需要)和NameDomainSelect ...叹息...

所以我决定作为一种解决方法,直到有人指示我否则修改验证的远程函数接受一个数组作为参数。 0元素是一个字符串,指向要包含的表单值,在这种情况下是DomainSelect ...,1元素是ajax请求的正常对象。

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

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

回答

3

尝试:

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

如果不工作,我会建议增加一个自定义的方法,你之前说的...