2011-08-31 16 views
8

C'è un modo utilizzando asp.net/jquery per attivare o disattivare una visibilità div quando si utilizza una casella di controllo come questo:jQuery selettore per "Html.CheckBoxFor"

<%: Html.CheckBoxFor(m => m.Type) %>

so come fare la parte jQuery , ma non sono sicuro di come determinare se la casella è stata selezionata o modificata. C'è una sorta di onChange o onClick che posso aggiungere a questo?

EDIT - Consentitemi di cambiare questo un po '... COME posso assegnare un id all'Html.CheckBoxFor() ??

+1

penso l'id della casella di controllo verrà automaticamente impostato per la proprietà dell'oggetto che è stato creato per. Quindi nell'esempio sopra sarebbe 'id = "Tipo"'. Puoi sempre dare un'occhiata al mark-up che il tuo codice crea per ricontrollare. – ipr101

risposta

17

Si potrebbe sottoscrivere l'evento .change() e .toggle() la visibilità del div a seconda che la casella di controllo è stato controllato o no:

$(function() { 
    $('#mycheckbox').change(function() { 
     var isChecked = $(this).is(':checked'); 
     $('#someDivId').toggle(isChecked); 
    }); 
}); 

e si può see it in action here.

Per identificare questa casella di controllo si potrebbe o assegnare un ID univoco:

<%: Html.CheckBoxFor(m => m.Type, new { id = "mycheckbox" }) %> 

o di una classe:

<%: Html.CheckBoxFor(m => m.Type, new { @class = "check" }) %> 

e quindi adattare il vostro selettore jQuery.

+0

Quello che intendevo era come posso assegnare un ID alla casella? Sto usando CheckBoxFor in ASP.Net e non sono sicuro di come impostare l'id. – Cody

+1

@Doctor Oreo, per impostazione predefinita l'helper Html.CheckBoxFor assegna un id. Sarà dedotto dall'espressione lambda nella gerarchia degli oggetti dei modelli di vista. Quindi se siamo al livello 0, sarà 'id =" Tipo "'. Ovviamente è possibile personalizzarlo utilizzando il corretto overload dell'assistente CheckBoxFor come mostrato nella mia risposta aggiornata. –

+0

Per qualche motivo, devo selezionare la casella e deselezionarla per la funzione() da registrare. – Cody

0

Sì, c'è un evento onclick/onchange per la maggior parte dell'elemento html.

Lasciate assumere la tua casella di controllo ha un id = "CheckBox1", è possibile effettuare le seguenti operazioni

var myCheckBox = document.getElementById("checkbox1"); 
myCheckBox.addEventListener('change', function(){do something}, false); 
+0

Quello che intendevo era come posso assegnare un ID alla casella? Sto usando CheckBoxFor in ASP.Net e non sono sicuro di come impostare l'id. – Cody

0

Vai a questa domanda: get the generated clientid for a form field, questa è la mia risposta:

io uso questo helper:

public static partial class HtmlExtensions 
{ 
    public static MvcHtmlString ClientIdFor<TModel, TProperty>(
     this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression) 
    { 
     return MvcHtmlString.Create(
       htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(
        ExpressionHelper.GetExpressionText(expression))); 
    } 
} 

utilizzarlo proprio come si farebbe con qualsiasi altro aiutante: @ Html.ClientIdFor (modello => model.client.email)

o nello script:

$(function() { 
    $('#@Html.ClientIdFor(m=>m.Type)').change(function() { 
     // Do stuff 
    }); 
});