无论如何,无论何时更改 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元素设置为“”。
答案 0 :(得分:3)
尝试:
<select id="DomainSelect" name="DomainSelect" onChange="$('#Name').valid();">
如果不能正常工作,我会建议您按照之前的说法添加另一种自定义方法...