2012-05-21 176 views
8

我有以下複選框:jQuery驗證輸入文本字段

<input type="checkbox" id="startClientFromWeb" name="startClientFromWeb" data-bind="checked: StartClientFromWeb" /> 

和下面的輸入文本字段:

<input id="mimeType" name="mimeType" data-bind= "value: MimeType" /> 

這是我的js驗證碼:

$("#franchiseForm").validate({ 
      rules: { 
       mimeType: { 
        required: $("#startClientFromWeb").is(":checked") 
       } 
      } 
     }); 

我希望僅當複選框被選中時才需要mimeType輸入文本字段。由於某種原因,上述不起作用。我對JavaScript和jquery很新。任何工作示例的幫助將不勝感激。謝謝!

回答

9

您可以添加自己的自定義驗證的方法來處理這樣的事情:

$.validator.addMethod("requiredIfChecked", function (val, ele, arg) { 
    if ($("#startClientFromWeb").is(":checked") && ($.trim(val) == '')) { return false; } 
    return true; 
}, "This field is required if startClientFromWeb is checked..."); 


$("#franchiseForm").validate({ 
     rules: { 
      mimeType: { requiredIfChecked: true } 
     } 
}); 
+0

我試過你的代碼。它給了我以下錯誤: 「預計:」 爲這一行:mimeType:{requiredIfChecked} 你能舉出小提琴的例子嗎? – Mdb

+0

'{requiredIfChecked:true}'抱歉... – ShaneBlake

+0

謝謝!問題是我正在對$(document).ready應用驗證,並且複選框的值始終爲false。現在我在ko.applyBindings調用後應用驗證,並按預期工作。無論如何謝謝你的幫助。 – Mdb

2

如果輸入是disabled,驗證將不會生氣。你可以使用這個事實 - 讓文本框是必需的,但最初禁用,只有當複選框被選中時才啓用它。

$(function() { 
    $('#startClientFromWeb').change(function() { 
     if ($(this).is(':checked')) { 
      $('#mimeType').removeAttr('disabled');     
     } 
     else { 
      $('#mimeType').attr('disabled', 'disabled'); 
     } 
    }); 
}); 
+0

我沒有禁用#mimeType輸入。 – Mdb