站点:http://tinyurl.com/358lh6a
无论何时要更改DomainSelect(域扩展名),我都想重新验证宫殿的地址(他们想要的域,形式是:名称)。
我尝试了一个简单的方法:
<select id=DomainSelect name=DomainSelect onChange="$('#Register').validate().element('#Name');">
虽然没有用。我不确定.element是否实际重新验证form元素,还是只是返回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();">
其中Name是子域,DomainSelect是域本身。然后,将NameDomainSelect和Name和DomainSelect串联在一起。然后,我必须为NameDomainSelect定义一个规则并稍微修改一下我的PHP。但是,现在它显示2个复选标记,因为它同时验证Name(必需)和NameDomainSelect ... Sigh ...
因此,我决定将其作为一种解决方法,直到有人向我展示否则要修改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元素设置为“”即可。
最佳答案
尝试:
<select id="DomainSelect" name="DomainSelect" onChange="$('#Name').valid();">
如果不起作用,我建议像您之前所说的那样添加另一个自定义方法...