2011-11-21 94 views
1

不会突出我使用jQuery验证上克隆

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的验证工作以精为先欺骗,包括我使用自定义功能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,但出于某种原因,它只是在克隆上突出显示后调用unhighlight,我不明白为什么。 谢谢。

+2

我们可以看到您的标记吗?您应该尝试记录元素以查看哪些元素正在传递到每个函数中。 – Mathletics

+0

添加jsfiddle到原来的帖子,希望有人可以指向我的正确方向:) –

+0

它似乎并没有验证工作在这里......? – Mathletics

回答

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可以按照预期工作。 那太愚蠢了。我感觉很糟糕。对不起,如果我让别人的脑子流血麒麟眼泪与此。