2011-11-21 72 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可以按照預期工作。 那太愚蠢了。我感覺很糟糕。對不起,如果我讓別人的腦子流血麒麟眼淚與此。