2011-01-16 21 views
5

Tengo el siguiente código jQuery para hacer que mis casillas de verificación actúen como botones de opción, de modo que solo se pueda verificar 1 de las 3 a la vez.jQuery - Desmarcar casillas de verificación que actúan como botones de radio

<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> 

Las casillas de verificación se nos extienden como la siguiente:

<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"> 

Esto funciona exactamente como yo quiero que funcione, no es un problema, excepto una vez que haga clic en uno de los 3, no puedo unclick se para que ninguno de ellos se verifique, esto es lo que quiero que suceda, así que solo puedo hacer clic uno a la vez, pero puedo desmarcarlos por completo.

Cualquier ayuda sería gran :)

Respuesta

12

Sólo ejecutar el código que desactiva la this otros si ha sido checked.

Ejemplo: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: Aquí es una revisión que impide que el cuadro recién revisado de ser desactivada al seleccionar las casillas con el mismo nombre. Utiliza not()(docs) para excluir la casilla de verificación actual.

Ejemplo: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

bien que funcionaba perfecto ... Muchas gracias :) – Cecil

+0

@Cecil: De nada. : o) – user113716

+0

@ Ӫ _._ Ӫ ¿Hay alguna ganancia de rendimiento con el uso de .not()? Por cierto, gracias, buscando implementar este tipo de funcionalidad aquí el usuario tiene un conjunto de opciones pero puede seleccionar ninguna o una. Con el uso de una radio también tuve que crear un botón de reinicio para borrarlo si no querían la opción después de todo. –

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

http://jsfiddle.net/yDPhv/

3

código menos! :-)

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

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

+0

buena alternativa +1 –

Cuestiones relacionadas