我有一张附有地图的表单。单击地图会在表单中为div添加隐藏的输入。
我想要一个验证规则来检查该div是否有任何隐藏元素。到目前为止,我只能使用虚拟元素执行此操作,我必须在发布表单之前手动删除:
<form action="..." method="post" id="signup">
<!-- ... -->
<div id="zones_selected"><input type="hidden" name="dummy"></div>
<!-- ... -->
</form>
$.validator.methods.zones = function (value, element, param) { return ($zone_holder.find('input[name!=dummy]').length > 0); };
$('#signup').validate({
rules: {
//...
'dummy': 'zones'
},
//...
submitHandler: function(form) { $(form).find('input[name=dummy]').remove(); form.submit(); }
});
然而,由于我的自定义验证器方法似乎没有触发unhighlight
函数,因此这些因错误放置而有很多不足之处,并且因为仅为表单验证输入输入而感到肮脏(不是非常不引人注意的)。
我想要的是没有额外的submitHandler
和规则来检查div中是否存在隐藏输入会产生unhighlight
触发器(如果用户点击了地图 - - 它创建了一个新的隐藏输入 - 我显示的消息告诉他们这样做会消失。
实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
我过去曾试图这样做。如果不对jquery.validator代码库进行一些修改,我不相信有办法做到这一点。
在查看JQuery.Validator.js时,请查看ln 423上的'elements'函数,你会看到类似这样的内容
return $([]).add(this.currentForm.elements)
.filter(":input")
.not(":submit, :reset, :image, [disabled]")
.not( this.settings.ignore )
.filter(function() {
!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
// select only the first element for each name, and only those with rules specified
if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
return false;
rulesCache[this.name] = true;
return true;
});
过滤器(“:输入”)会给你带来悲伤。