2013-07-26 40 views
0

我有一組html輸入:複選框項目。其中之一已禁用屬性。 預期的行爲是,jquery驗證插件將忽略輸入已禁用屬性,但會處理對未禁用的其他元素的驗證。Jquery驗證插件禁用屬性錯誤

<input type="checkbox" name="example[]" value="1" minlength="1" required="required" disabled="disabled" /> 
<input type="checkbox" name="example[]" value="2" minlength="1" required="required" /> 
<input type="checkbox" name="example[]" value="3" minlength="1" required="required" /> 

我創建了一個活動示例來演示這個行爲。 http://jsfiddle.net/cVMBA/24/

預期的行爲是在此情況下至少選中一個複選框。如果沒有,那麼應該出現錯誤。 雖然我可以看到行爲真的很奇怪。如果你在控制檯看,你可以看到,首先errorPlacement功能被解僱,然後unhighlight功能火災。所以這裏的問題是沒有顯示錯誤。

當您刪除屬性disabled =「disabled」該插件將按預期工作。 任何想法,或者可能是黑客來覆蓋這種行爲?

+0

它的工作非常適合我:http://jsfiddle.net/4fShN/ – Sparky

回答

1

該插件有關disabled="disabled"屬性做工精細,如下所示:http://jsfiddle.net/4fShN/

關於你的代碼:

$('#test_validate').validate({ 
    ignore : [], 
    unhighlight : function(element, errorClass, validClass){ 
     $('#test_validate').removeClass('error-highlighted'); 
    }, 
    errorPlacement: function(error, element) {   
     $('#test_validate').addClass('error-highlighted').find('.error-div').text('Select radio button'); 
    }, 
    submitHandler: function(form) { 
      alert('form ok'); 
    } 
}); 

你缺少highlight回調函數,這是補充,unhighlight回調。您應該注意,errorPlacement僅在開始時觸發放置錯誤label元素。如果您想隨錯誤一起切換,那麼highlightunhighlight函數應該用於此。

此外,您的代碼正在將該類應用於$('#test_validate'),其中包含<form>元素的id。通常,您應用&通過使用包含的element參數從<input>元素中刪除具有錯誤的類。

highlight : function(element, errorClass, validClass){ 
     $(element).addClass('error-highlighted'); 
    }, 
    unhighlight : function(element, errorClass, validClass){ 
     $(element).removeClass('error-highlighted'); 
    }, 

爲了讓事情更簡單,上面的代碼可以通過簡單地定義你的validClasserrorClass選項被刪除。爲什麼他們可以被刪除?因爲上面的兩個函數基本上與默認插件行爲相同。

errorClass: "error-highlighted", 
validClass: "valid" 

查看文檔http://jqueryvalidation.org/validate

+0

謝謝你這麼詳細和偉大的答案!這非常合理! –