2012-07-04 52 views
0

我一直在嘗試做一些jQuery驗證,其中只有在複選框被選中時才驗證文本字段或下拉列表。MVC3有條件的jQuery驗證w /下拉列表

以下是我有:

@using (Ajax.BeginForm("SomeAction", "SomeController", new { id = Model.Id }, new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "somePanel", InsertionMode = InsertionMode.Replace }, new { @id = "testForm" })) 
{ 
@Html.DropDownListFor(x => Model.SelectedValue, Model.YesNoList, " ", new { @id ="drpYesNo" }) 
@Html.TextAreaFor(x => x.CriminalText, new { @id = "txtSomeField" }) 

<input type="submit" value="Save" /> 
} 

在JavaScript我有這樣的:

<script type="text/javascript"> 
    jQuery.validator.messages.required = ""; 
    $("#testForm").validate(
    { 
     rules: { 
      txtSomeField: { 
       required: function (element) { 
        return $("input:checkbox[name='drpYesNo']:checked").val() == 'Yes'; 
       } 
      } 
     } 

    }); 

    $("#testForm").on("submit", function() { 
     if (!$(this).valid()) { 
      return false; 
     } 
    }); 
</script> 

我下面一些是網上的例子,但似乎無法工作。任何幫助深表感謝。七月四日快樂!

回答

2

當你定義一個jQuery驗證規則時,你應該使用,而不是ID要定義規則的元素。所以在你的情況下,你的<textarea>的名稱是CriminalText,而不是txtSomeField(很明顯,如果這是在編輯器模板中,名稱可能不同,例如Foo.Bar[3].CriminalText)。

所以第一步是使用適當的名稱:

rules: { 
    CriminalText: { 
     required: function (element) { 
      ... 
     } 
    } 
} 

現在讓我們看看第二個步驟。在你的選擇器中,你使用了一些我在DOM中看不到的:checkbox。我所能看到的(至少在你在這裏展示的是)DropDownList和一個textarea。所以,如果你想<textarea>如果用戶選擇了<select>列表中的數值Yes僅被要求,這裏是你如何能定義規則:

rules: { 
    CriminalText: { 
     required: function (element) { 
      return $('#drpYesNo').val() == 'Yes'; 
     } 
    } 
} 

顯然,這假定您有以下選項中選擇:

<select> 
    <option value="Yes">Yes, of course</option> 
    ... 
</select> 

而且最後再說一句:請確保您有沒有包括jquery.validate.unobtrusive.js腳本到您的網頁,因爲它會使用微軟的不顯眼的庫來自動編寫基於HTML5由助手生成的數據 - *屬性jQuery.validate規則從而完成搗亂你的自定義規則設置。

+1

你搖滾的人!它是jquery.validate.unobtrusive.js – jmogera

+0

@up:這!我無法將我的頭圍繞我的驗證代碼出現問題。這是來自MS的不顯眼的腳本。 :/ –

1

這裏的選擇是問題,使用是用於複選框。通常,jQuery更喜歡css類名或id。

required: function (element) { 
    return $("#drpYesNo").val() === 'Yes'; 
} 
+0

drpYesNo是這仍然會工作? – jmogera

+0

我被選擇器「輸入:複選框」拋棄了。 –