Foros del Web » Programando para Internet » Javascript »

Seleccionar sólo un CHKBOX (faq 92)

Estas en el tema de Seleccionar sólo un CHKBOX (faq 92) en el foro de Javascript en Foros del Web. Eso del título, salvo que no sé cuantos checkboxES serán puesto que son generados por ASP en base a los registros de una tabla y ...
  #1 (permalink)  
Antiguo 26/03/2004, 13:02
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Seleccionar sólo un CHKBOX (faq 92)

Eso del título, salvo que no sé cuantos checkboxES serán puesto que son generados por ASP en base a los registros de una tabla y en la faq 92 la cantidad es fija.

Cómo se podría adaptar dicha FAQ? (los chkbox se llaman desde PUB1 a PUBn)
  #2 (permalink)  
Antiguo 26/03/2004, 13:44
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola, dazuaga.

Prueba esto a ver si es lo que buscas:
Código PHP:
<html>
<
head>
<
script>
function 
contar(frm) {
    
maximo=1;
    
elem=frm.form.elements;
    
num=0;
    for(
i=0;i<elem.length;i++)
        if(
elem[i].type=='checkbox')
            if(
elem[i].checked)
                
num++
    if (
num>maximo) {
        
alert('maximo 1 checkbox');
        
frm.checked=false;
    }
}
</script>
</head>

<body>
<form>
<input type="checkbox" onclick="contar(this)" />
<input type="checkbox" onclick="contar(this)" />
<input type="checkbox" onclick="contar(this)" />
</form>
</body>
</html> 
Saludos,
  #3 (permalink)  
Antiguo 26/03/2004, 14:52
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Hola JavierB, gracias por la ayuda.

Te comento: Probé el script y, si bien funciona correctamente en formularios con sólo un "juego" de checkbox'es, no sirve tal cual está para el formulario que estoy haciendo porque además (cosa que omití anteriormente) tengo otro checkbox (eliminar1 a eliminarN) al lado de este (PUB1 a PUBn) por cada registro.

Entonces, no me permite seleccionar ni uno del juego "PUB" si hay marcado por lo menos uno del juego "eliminar" (se entendió? ) y esa situación es posible que ocurra.

Yo creo que se podría solucionar si de alguna manera se hace referencia en el script a los checkbox cuyo name comience por PUB, pero no sé cómo


Además te paso un script que estaba haciendo mientras me respondías, pero estoy "trabado".. no sé por qué el alert me devuelve siempre la máxima cantidad de checkbox que existan sin importar si están o no checked:


Código:
function SoloUno(CantidadElemento) {
var i;
var n = parseInt(eval("document.Web." + CantidadElemento + ".value"));
var cuenta = 0;
	
for (i = 1; i < n + 1; i++){
if (eval("document.Web.PUB" + i + ".chequed = true")){
cuenta++;
}
}
alert(cuenta)
// luego la idea sería que si cuenta es mayor a 1 haga un alert
// al submit del formulario y detenga el submit. Si es 1, todo bien: que haga submit.
// Si es 0, que avise que no puede ser 0 y detenga el submit
}

Donde "CantidadElemento" es un text hidden que contiene la cantidad de checkbox que se han generado dinámicamente. Iba por buen camino con ese código o es un disparate la idea?

Saludos
  #4 (permalink)  
Antiguo 27/03/2004, 03:57
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

No he probado tu función, pero tienes un error en esta línea:

if (eval("document.Web.PUB" + i + ".chequed == true")){

En JavaScript el signo de comparación en un igual doble.

He cambiado un poco mi código y creo que se acerca más a lo que necesitas:
Código PHP:
function contar(frm) {
    
maximo=1;
    
elem=frm.form.elements;
    
num=0;
    for(
i=0;chk=elem[i];i++)
        if(
chk.name.substr(0,3)=='PUB' && chk.checked)
           
num++
    if (
num>maximo) {
        
alert('maximo 1 checkbox');
        
frm.checked=false;
    }

Suerte. Saludos,
  #5 (permalink)  
Antiguo 27/03/2004, 15:57
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Cita:
En JavaScript el signo de comparación en un igual doble

Pero claro!
Soy un nardo de aquellos... siempre lo olvido


Cita:
if(chk.name.substr(0,3)=='PUB' && chk.checked)

Creo que ahora va a funcionar perfectamente.
Gracias, el lunes te comento cómo me fue
  #6 (permalink)  
Antiguo 29/03/2004, 12:44
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 2 meses
Puntos: 535
Gracias, JavierB. Funcionó de maravillas
__________________
...___...
  #7 (permalink)  
Antiguo 30/03/2004, 00:57
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Sabía que al final lo conseguirías Hasta otra
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:13.