2011-01-16 12 views
5

Ho il seguente codice jQuery per far sì che le mie caselle di controllo agiscano come i pulsanti di opzione, in modo che solo 1 su 3 possa essere controllato alla volta.jQuery - Deseleziona le caselle di controllo che fungono da pulsanti di opzione

<script type="text/javascript" language="javascript"> 
$(document).ready(function() { 
    $("#testing input:checkbox").change(function(){ 
     var checkname = $(this).attr("name"); 
     $("input:checkbox[name='" + checkname + "']").removeAttr("checked"); 
     this.checked = true; 
    }); 
}); 
</script> 

Le caselle di controllo vengono spiegate come la seguente:

<input type="checkbox" id="testing" name="testing" value="B"> 
<input type="checkbox" id="testing" name="testing" value="I"> 
<input type="checkbox" id="testing" name="testing" value="A"> 

Questo funziona esattamente come voglio farlo funzionare, non è un problema, tranne una volta i clic su una delle 3, i cant deselezionare esso in modo che nessuno di essi venga controllato, questo è quello che voglio che accada, quindi con l'unica possibilità di fare clic uno alla volta, sono in grado di deselezionarli completamente.

Qualsiasi aiuto sarebbe grande :)

risposta

12

eseguito solo il codice che deseleziona gli altri se this è stato checked.

Esempio:http://jsfiddle.net/CX5Th/1/

$("#testing input:checkbox").change(function() { 
    if(this.checked) { 
     var checkname = $(this).attr("name"); 
     $("input:checkbox[name='" + checkname + "']").removeAttr("checked"); 
     this.checked = true; 
    } 
}); 

EDIT: Ecco una revisione che impedisce la casella di recente controllato dall'essere deselezionata quando si seleziona le caselle con lo stesso nome. Utilizza not()(docs) per escludere la casella di controllo corrente.

Esempio:http://jsfiddle.net/CX5Th/2/

$("#testing input:checkbox").change(function() { 
    if (this.checked) { 
     var checkname = $(this).attr("name"); 
     $("input:checkbox[name='" + checkname + "']").not(this).removeAttr("checked"); 
    } 
}); 
+0

Bene che ha funzionato perfettamente ... Grazie mille :) – Cecil

+0

@Cecil: Di niente. : o) – user113716

+0

@ Ӫ _._ Ӫ C'è qualche guadagno in termini di prestazioni usando il .not()? BTW Grazie, cercando di implementare questo tipo di funzionalità qui l'utente ha una serie di opzioni ma può selezionare nessuno o uno. Con l'utilizzo di una radio ho anche dovuto creare un pulsante di reset per cancellarlo se non volevano l'opzione, dopo tutto. –

0
$("input:checkbox").click(function(){ 
    var ischecked = $(this).attr('checked'); 
    $('input:checkbox').attr('checked',false); 
    $(this).attr('checked', ischecked); 
}); 

http://jsfiddle.net/yDPhv/

3

meno codice! :-)

var boxes = $("input:checkbox").click(function(){ 
    boxes.not(this).attr('checked', false); 
}); 

http://jsfiddle.net/YqSXA/1/

+0

bella alternativa +1 –

Problemi correlati