2015-12-30 13 views
5

Ho un modulo con più gruppi di caselle di controllo.Come deselezionare tutte le caselle di controllo tranne quella che usa jQuery?

Ogni opzione di casella di controllo ha un attributo HTML 5 personalizzato denominato itemtype. Quando l'input di type = "checkbox" cambia, devo valutare la casella che è stata appena selezionata. Se il valore di esso è data-itemtype è uguale a "Skipper", desidero deselezionare tutte le altre caselle di controllo appartenenti allo stesso gruppo.

In altre parole, si supponga di avere più caselle di controllo e una delle opzioni di casella di controllo abbia un'etichetta denominata "Nessuna", se l'utente verifica "Nessuno", Nulla deve essere selezionato ma "Nessuno". Non posso usare un pulsante di opzione qui perché voglio che l'utente possa controllare più opzioni se "Nessuno" non è selezionato.

Ecco una ripartizione del mio codice

CHECKBOX GRUPPO 1

<input name="control_307[0][307:1003]" id="item_307_1003_0" value="307:1003" data-itemtype="Answer" type="checkbox"> Zulauf Ltd<br> 
<input name="control_307[0][307:361]" id="item_307_361_0" value="307:361" data-itemtype="Answer" type="checkbox"> Ziemann, McLaughlin and Kohler 
<input name="control_307[0][308:1013]" id="item_307_1013_0" value="308:1013" data-itemtype="Skipper" type="checkbox"> None<br> 

CHECKBOX GRUPPO 2

<input name="control_1000[0][1000:999]" id="item_1000_999_0" value="307:1003" data-itemtype="Answer" type="checkbox"> First Options<br> 
<input name="control_1000[0][1000:666]" id="item_1000_666_0" value="1000:666" data-itemtype="Answer" type="checkbox"> Some other option 
<input name="control_1000[0][1000"123]" id="item_1000_123_0" value="308:1013" data-itemtype="Skipper" type="checkbox"> None<br> 

Ho creare un violino visualizzare quello che ho fatto insieme a l'intero modulo https://jsfiddle.net/8yf0v3xt/13/

Ho provato a fare qualcosa di simile questo ma non funziona

$(:checkbox).change(function(){ 
     var skipper = $("input:checkbox[data-itemtype='Skipper']"); 

     if(skipper.is(":checked")){ 

      $(this).attr('checked', false); //uncheck all the boxes for the current group 

      skipper.attr('checked', true); //re-check the box that caused everything to uncheck 

     } 
}).change(); 

Cosa posso fare per annullare tutto l'opzione se è selezionato "Nessuno"?

+0

@MikeA Penso che questo sia quello che vuoi? https://jsfiddle.net/8yf0v3xt/14/ – ketan

+0

@ketan che impedisce semplicemente il clic sulla casella anycheck che ha il tipo di voce skipper. –

risposta

7

Spero che questo avrebbe funzionato per voi

$(:checkbox).change(function(){ 
     var skipper = $("input:checkbox[data-itemtype='Skipper']"); 

    if(skipper.is(":checked")){ 

     //$(":checkbox").attr('checked', false); //uncheck all the boxes for the current group 

     //skipper.attr('checked', true); //re-check the box that caused everything to uncheck 

     $(":checkbox").not(skipper).prop("checked",false);//THIS IS IMPORTANT 

    } 
}).change(); 

UPDATE

WORKING FIDDLE

UPDATE 2

WORKING FIDDLE 2

$(:checkbox).change(function(){ 
    var skipper = $("input:checkbox[data-itemtype='Skipper']"); 

if(skipper.is(":checked")){ 

    //$(":checkbox").attr('checked', false); //uncheck all the boxes for the current group 

    //skipper.attr('checked', true); //re-check the box that caused everything to uncheck 

    //$(":checkbox").not(skipper).prop("checked",false);//THIS IS IMPORTANT 
    //THIS IS IMPORTANT 
    $(this).closest(".survey-control-fieldset").find(":checkbox").not(skipper).prop("checked",false); 

} 
}).change(); 

UPDATE 3

WORKING FIDDLE 3

$(:checkbox).change(function(){ 
     var skipper = $("input:checkbox[data-itemtype='Skipper']"); 

    if(skipper.is(":checked")){ 

     //$(":checkbox").attr('checked', false); //uncheck all the boxes for the current group 

     //skipper.attr('checked', true); //re-check the box that caused everything to uncheck 

     //$(":checkbox").not(skipper).prop("checked",false);//THIS IS IMPORTANT 
     //THIS IS IMPORTANT 
     $(this).closest(".survey-control-fieldset").find(":checkbox").not(skipper).prop("checked",false); 

    } 
    else 
     { 
      $(this).closest(".survey-control-fieldset").find(":checkbox[data-itemtype='Skipper']").prop("checked",false); 
     } 
    }).change(); 

CONCLUSIONE

alcuni punti ho notato sbagliato nel codice sono i seguenti S.

  1. Si stava utilizzando $(this).attr("checked",false); per deselezionare tutte le caselle di controllo che è sbagliato. $(this) punti a CORRENTE SINGOLO ELEMENT solo, non tutti.

  2. Si stava utilizzando .attr("checked",false) che è anche corretto, dovrebbe essere o .attr("checked","checked") o .prop("checked",true).

+0

Come si inserisce questa casella di controllo nel contesto del suo gruppo? Non funzionerà su tutte le caselle sulla pagina? –

+0

Ho aggiornato il codice, con il violino. Possiamo filtrare la casella di controllo che vogliamo. – Hemal

+0

Quando si controlla uno skipper in qualsiasi fieldset, si cancella qualsiasi casella di controllo sulla pagina indipendentemente dal fatto che si trovi nello stesso fieldset o meno. È questa l'operazione prevista? –