我正在使用
克隆表单上的一些选择框var o = settings;
var obj = $(this);
var objMatrix = $("div#dup_idiom").clone(true);
var placeHolder = obj.find(o.placeHolder);
var processClone = jQuery.format(objMatrix.html());
placeHolder.append($(processClone(i++)).addClass('closeable'));
由
调度obj.find(o.addRow).on('click', function(e) { ... });
克隆工作正常。这是一个在document.ready上调用的函数。所以在页面加载时我已经在页面上至少有一个默认的克隆组。
jquery验证适用于第一个dupe,包括我正在使用的自定义hightlight函数:
$(".selector").validate({
highlight: function(element, errorClass) {
if($(element).hasClass('langDep')) {
$('#idiomArea').addClass(errorClass);
} else {
$(element).closest('.clearfix').addClass(errorClass);
}
},
unhighlight: function(element, errorClass) {
$(element).closest('.clearfix').removeClass(errorClass);
}
});
当我复制该组时,如果不正确,验证会将消息放在dup上,但是它不会突出显示,我的hightlight功能出了什么问题?
就我在调试中看到的而言,它应用了hightlight,但由于某种原因,它只是在克隆上突出显示之后调用unhighlight而我不明白为什么。 感谢。
答案 0 :(得分:0)
意识到什么是错的。
我正在使用此自定义验证来验证两个选择框,只有在选择了第一个框时才会这样:
$.validator.addMethod("langDeep", function(value, element) {
if(!$(element).parent().prev().children("select").val()) return true;
return value;
}, "Please select both the item and its amount.");
问题在于我试图突出显示某个区域,而不是表单中此部分的单个元素。它适用于第一个欺骗而不是所有其他欺骗。 事实证明,如果该组中至少有一个是正确的,则验证将返回true,这就是为什么它适用于第一个并且从不用于欺骗,第一个始终是正确的! 诀窍是将自定义验证设置为组验证。像这样:
$.validator.addMethod("langDeep", function(value, element) {
var v = true;
$('.dup_idiom_area').find('select.langDeep').each(function(){
if(!$(this).val() && $(this).parent().prev().children("select").val()) {
v = false;
}
});
return v;
}, "Please select both the item and its amount.");
现在,hightlight按预期为整个表单工作。 那真是太愚蠢了。我觉得很难受。对不起,如果我让别人的大脑流出独角兽的泪水。