Foros del Web » Programando para Internet » Javascript »

Tratamiento de checkboxes

Estas en el tema de Tratamiento de checkboxes en el foro de Javascript en Foros del Web. Buenos días, Mi problema es el siguiente: Como se pueden dar cuenta por mi nick yo trabajo con php y uso javascript en ocaciones para ...
  #1 (permalink)  
Antiguo 01/07/2011, 08:54
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Tratamiento de checkboxes

Buenos días,

Mi problema es el siguiente:

Como se pueden dar cuenta por mi nick yo trabajo con php y uso javascript en ocaciones para validar por lo que no conozco mucho del tema, así que por favor disculpen mi ignorancia...

tengo esos dos campos:



lo que quiero es que al darle click al check del riesgo se deshabilite el de la oportunidad, ya que sólo pueden escoger uno u otro:

yo en mi poco conocimiento, hice un script que funciona a la perfección en firefox, opera, safari, chrome, pero en IE me genera problemas y es el navegador que más se usa acá...

les adjunto el código

Código Javascript:
Ver original
  1. function validarCheck(valor){
  2.     if (valor == 0){
  3.         valor = ""
  4.     }
  5.     var checksi = document.getElementById('cumpleSiAF'+valor);
  6.     var checkno = document.getElementById('cumpleNoAF'+valor);
  7.     if(checksi.checked == true){
  8.         checkno.setAttribute('disabled', 'disabled');
  9.     }
  10.     else{
  11.         checkno.removeAttribute('disabled');
  12.     }
  13.     if(checkno.checked == true){
  14.         checksi.setAttribute('disabled', 'disabled');
  15.     }
  16.     else{
  17.         checksi.removeAttribute('disabled');
  18.     }
  19. }

Si alguien me puede ayudar a resolver el problema de IE, estaré agradecido o si por el contrario hay otra forma de hacerlo también será bienvenida
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #2 (permalink)  
Antiguo 01/07/2011, 09:03
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Tratamiento de checkboxes

¿Puedes poner el código HTML correspondiente a los checkbox? Más que nada para ver si lo estás haciendo bien del todo.
  #3 (permalink)  
Antiguo 01/07/2011, 09:06
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Respuesta: Tratamiento de checkboxes

Cita:
Iniciado por alexg88 Ver Mensaje
¿Puedes poner el código HTML correspondiente a los checkbox? Más que nada para ver si lo estás haciendo bien del todo.

Código PHP:
Ver original
  1. <?php
  2.                     if($rowPFYS['cumpleSi'] == 1){
  3.                         $seleccionar = "checked='true' onchange=validarCheck('$pfys');";
  4.                     }
  5.                     else if($rowPFYS['cumpleSi'] == 0 && $rowPFYS['cumpleSi'] != ""){
  6.                         $seleccionar = "disabled='true' onchange=validarCheck('$pfys');";
  7.                     }
  8.                     else if($rowPFYS['cumpleSi'] == ""){
  9.                         $seleccionar = "onchange=validarCheck('$pfys');";
  10.                     }
  11.                     ?>
  12.                     <td bgcolor="<?php echo $Color_Tabla_Linea_1; ?>" align="center">
  13.                         <font face="Tahoma">
  14.                             <input type="checkbox" id="cumpleSi<?php echo $seccion; ?>"
  15.                                 name="cumpleSi<?php echo $seccion; ?>"
  16.                                 <?php echo $seleccionar; ?> />
  17.                         </font>
  18.                     </td>
  19.                     <?php
  20.                     if($rowPFYS['cumpleNo'] == 1){
  21.                         $seleccionar = "checked='true' onchange=validarCheck('$pfys');";
  22.                     }
  23.                     else if($rowPFYS['cumpleNo'] == 0 && $rowPFYS['cumpleNo'] != ""){
  24.                         $seleccionar = "disabled='true' onchange=validarCheck('$pfys');";
  25.                     }
  26.                     else if(empty ($rowPFYS['cumpleNo'])){
  27.                         $seleccionar = "onchange=validarCheck('$pfys');";
  28.                     }
  29.                     ?>
  30.                     <td bgcolor="<?php echo $Color_Tabla_Linea_1; ?>" align="center">
  31.                         <font face="Tahoma">
  32.                             <input type="checkbox" id="cumpleNo<?php echo $seccion; ?>"
  33.                                 name="cumpleNo<?php echo $seccion; ?>"
  34.                                 <?php echo $seleccionar; ?> />
  35.                         </font>
  36.                     </td>
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #4 (permalink)  
Antiguo 01/07/2011, 09:13
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Tratamiento de checkboxes

Mejor pon el código HTML resultado (el que sale al llamar a la página desde el navegador)
  #5 (permalink)  
Antiguo 01/07/2011, 09:26
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Respuesta: Tratamiento de checkboxes

Cita:
Iniciado por alexg88 Ver Mensaje
Mejor pon el código HTML resultado (el que sale al llamar a la página desde el navegador)
en firefox:
Código HTML:
Ver original
  1. <td align="center" bgcolor="#E2E3E4">
  2.       <input id="cumpleSiAF1" name="cumpleSiAF1" disabled="true" onchange="validarCheck('1');" type="checkbox">
  3. </td>
  4. <td align="center" bgcolor="#E2E3E4">
  5.       <input id="cumpleNoAF1"
  6.                                       name="cumpleNoAF1"
  7.                                       checked="true" onchange="validarCheck('1');" type="checkbox">
  8. </td>
en IE
Código HTML:
Ver original
  1. <td bgcolor="#E2E3E4" align="center">
  2.      <input type="checkbox" id="cumpleSiAF1"
  3.                                        name="cumpleSiAF1"
  4.                                        disabled='true' onchange=validarCheck('1'); />
  5. </td>
  6. <td bgcolor="#E2E3E4" align="center">
  7.      <input type="checkbox" id="cumpleNoAF1"
  8.                                        name="cumpleNoAF1"
  9.                                        checked='true' onchange=validarCheck('1'); />
  10. </td>
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #6 (permalink)  
Antiguo 01/07/2011, 10:15
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Tratamiento de checkboxes

El problema resulta que está en como trata IE el evento onchange, así que la manera de solucionarlo es utilizar el evento onclick.

También puedes quitar las comparaciones del tipo checked == true y dejar sólo checked que ya es de tipo booleano.

Código Javascript:
Ver original
  1. function validarCheck(valor){
  2.    
  3.      
  4.    
  5.    
  6.     if (valor == 0){
  7.         valor = ""
  8.     }
  9.     var checksi = document.getElementById('cumpleSiAF'+valor);
  10.     var checkno = document.getElementById('cumpleNoAF'+valor);
  11.     if(checksi.checked){
  12.         checkno.setAttribute('disabled', 'disabled');    
  13.          
  14.          
  15.     }
  16.     else{
  17.         checkno.removeAttribute('disabled');          
  18.         checkno.focus();
  19.  
  20.     }
  21.     if(checkno.checked){
  22.         checksi.setAttribute('disabled', 'disabled');
  23.     }
  24.     else{
  25.         checksi.removeAttribute('disabled');    
  26.        
  27.     }
  28. }

Código HTML:
Ver original
  1. <td align="center" bgcolor="#E2E3E4">
  2.       <input id="cumpleSiAF1" name="cumpleSiAF1" disabled="disabled" onclick="validarCheck('1');" type="checkbox">
  3. </td>
  4. <td align="center" bgcolor="#E2E3E4">
  5.       <input id="cumpleNoAF1"
  6.                                       name="cumpleNoAF1"
  7.                                       checked="checked" onclick="validarCheck('1');" type="checkbox">
  8. </td>
  #7 (permalink)  
Antiguo 01/07/2011, 10:39
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Respuesta: Tratamiento de checkboxes

Pues sigue sin funcionarme en IE7 e IE8, en el 9 funciona perfectamente, pero encontré otra forma de hacerlo y lo probé en el IE7, IE8 e IE9 y en todos funciona al igual que en el resto de navegadores, aquí la coloco:

Código HTML:
Ver original
  1. <input name="oportunidad1_1" id="oportunidad1_1" onclick="javascript: document.form1.riesgo1_1.disabled = this.checked;" type="checkbox" value="on"/>

Gracias alexg88,

lo del onclick si sirvió pero con este método porque me pasaba lo mismo que con el otro ya que lo tenía onchange
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #8 (permalink)  
Antiguo 01/07/2011, 10:41
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Tratamiento de checkboxes

Lo he probado en todos los IE y funcionaba. Debes estar haciendo algo mal.
  #9 (permalink)  
Antiguo 01/07/2011, 10:56
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Respuesta: Tratamiento de checkboxes

Cita:
Iniciado por alexg88 Ver Mensaje
Lo he probado en todos los IE y funcionaba. Debes estar haciendo algo mal.
Le cambié los onchange por onclick y le cambie checked='true' por checked='checked' y no funcionó pero el otro que coloqué si funciona a las mil maravillas :D de todas formas gracias!
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175

Etiquetas: checkboxes, tratamiento
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 03:05.