2013-05-08 6 views
0

У меня есть флажок - HasRaffle, для которого требуется текстовое поле - RaffleItem, чтобы содержать данные, если отмечен HasRaffle. Как мне это сделать? Раньше я никогда не выполнял свои собственные проверки jQuery. Это то, что я пытался, но он не работает вообще. Я даже близко?jQuery validation - Текстовое поле требует данных, если флажок установлен.

$("#donationEventForm").validate({ 
    rules: { 
     RaffleItem: { 
      required: function() { 
       if ($("#HasRaffle").is(":checked")) { 
        if ($("#RaffleItem").val === '') { 
         return true; 
        } else { 
         return false; 
        } 
       } else { 
        return false; 
       } 
      }, 
      messages: { 
       required: "This is a test!!" 
      } 
     } 
    } 
}); 

EDIT: Вот мой взгляд

@using (Html.BeginForm("Create", "DonationEvent", FormMethod.Post, new {id = "donationEventForm"})) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(false) 

    <div class="form-field"> 
     @Html.LabelFor(model => model.Charity) 
     @Html.TextBoxFor(model => model.Charity) 
     @Html.ValidationMessageFor(model => model.Charity) 
    </div> 

    <div class="form-field"> 
     @Html.LabelFor(model => model.StartDate) 
     @Html.TextBoxFor(model => model.StartDate, new {@class = "datepicker"}) 
     @Html.ValidationMessageFor(model => model.StartDate) 
    </div> 

    <div class="form-field"> 
     @Html.LabelFor(model => model.EndDate) 
     @Html.TextBoxFor(m => m.EndDate, new {@class = "datepicker"}) 
     @Html.ValidationMessageFor(model => model.EndDate) 
    </div> 

    <div class="form-field"> 
     @Html.Label("Raffle?") 
     @Html.CheckBox("HasRaffle", true) 
    </div> 

    <div class="form-field"> 
     @Html.LabelFor(model => model.RaffleItem) 
     @Html.TextBoxFor(model => model.RaffleItem) 
     @Html.ValidationMessageFor(model => model.RaffleItem) 
    </div> 

    @Html.TextBoxFor(model => model.GLCode, new {@type = "hidden"}) 
    @Html.TextBoxFor(model => model.TransactionDescription, new {@type = "hidden"}) 
    @Html.TextBoxFor(model => model.CreatedBy, new {@type = "hidden"}) 

    <div class="form-field-buttons"> 
     <input type="submit" value="Create" /> 
     <input type="button" value="Cancel" onclick="location.href='../Home/Index'"/> 
    </div> 

} 
+0

Это только половина картины. Также покажите HTML для своей формы. – Sparky

ответ

2

Вам нужно добавить правило с addMethod

jQuery.validator.addMethod('checkRaffle', function(value, element){ 
    if ($("#HasRaffle").is(":checked")) { 
     if (value === '') { 
      return false; 
     } else { 
      return true; 
     } 
    } else { 
     return true; 
    } 
}, 'Please write something') 

Тогда правило будет выглядеть примерно так:

rules: { 
    'RaffleItem': { 
     'checkRaffle' : true 
    } 
} 

Этот код не проверен (и будет, вероятно, не работать, потому что я не могу видеть вашу DOM), НО если вы сможете увидеть логику моего кода, вы, вероятно, сможете отладить свой!

Смежные вопросы