Foros del Web » Programando para Internet » Javascript »

Problemas con el atributo disabled

Estas en el tema de Problemas con el atributo disabled en el foro de Javascript en Foros del Web. En teoría al hacer click en el checkbox si el boton "Ok" está disabled="disabled" debería eliminar el atributo para que el botón estuviera activo y ...
  #1 (permalink)  
Antiguo 21/04/2009, 12:09
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Problemas con el atributo disabled

En teoría al hacer click en el checkbox si el boton "Ok" está disabled="disabled" debería eliminar el atributo para que el botón estuviera activo y así sucede, solo que según el debug que trago de hacer con FireBug aparentemente no elimina el atributo del código, solamente cambia el estado, ni siquiera cambia el contenido del atributo. Por lo que nunca entra en la segunda condicion del if que es la que deshabilita nuevamente el botón cuando desmarcas la casilla del checkbox.

Por cierto ¿cómo puedo hacer que la declaración que se hace dentro del formulario de la variable de javascript boton_aceptar sea vista desde dentro de la funcion checkevent()? lo digo porque veo poco eficiente que haya que redeclarar el objeto otra vez dentro de la misma...

Código javascript:
Ver original
  1. function checkevent(e)
  2. {
  3.     var objeto=e.srcElement || e.target;
  4.     var evento = e.type;
  5.     if (objeto.name == "checkbox_aceptar" || evento == "change")
  6.     {
  7.        
  8.         var boton_aceptar = document.getElementById("boton_aceptar")
  9.         if ( boton_aceptar.disabled = "disabled") {boton_aceptar.removeAttribute("disabled") ;}
  10.         else {boton_aceptar.setAttribute("disabled", "disabled");}
  11.     }
  12. }
Código html:
Ver original
  1. <form name"registro" action="?accion=reg_usuario" method="post" enctype="application/x-www-form-urlencoded">
  2. <input type="text" id="reg_email" name="reg_email" title="Email de usuario" value="" /></label><br />
  3. <input  id="reg_pass" name="reg_pass" type="password" title="Contraseña" value="" /></label><br />
  4. <input id="reg_pass2" name="reg_pass2" type="password"  title="Contraseña de confirmación" value="" /></label><br />
  5. <label><input id="checkbox_aceptar" name="checkbox_aceptar" type="checkbox" title="Acepto los términos de servicio de CON" />Entiendo y acepto la política de privacidad </label><br />
  6. <input id="boton_aceptar" type="submit" value="Ok" />
  7.  
  8. <!--
  9. //Esto inicializa el estado del botón por si no hay javascript activo
  10. var boton_aceptar = document.getElementById("boton_aceptar");
  11. boton_aceptar.setAttribute("disabled", "disabled");
  12. -->
  13.  
  14. </form>

Código javascript:
Ver original
  1. <script>
  2. <!--
  3. var checkbox_aceptar = document.getElementById("checkbox_aceptar");
  4. if (checkbox_aceptar.addEventListener) //W3C DOM
  5. {
  6.     checkbox_aceptar.addEventListener('change', function(event) { checkevent(event) }, false);
  7. }
  8. else //IE DOM
  9. {
  10.     checkbox_aceptar.attachEvent('onchange', function(event) { checkevent(event) });
  11. }
  12.    
  13. -->
  14. </script>
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #2 (permalink)  
Antiguo 21/04/2009, 12:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problemas con el atributo disabled

En lugar de setAttribute, para habilitar usa:
Código javascript:
Ver original
  1. elem.disabled = false;
Y para deshabilitar:
Código javascript:
Ver original
  1. elem.disabled = true;
Donde elem es la referencia al elemento a deshabilitar/habilitar.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 21/04/2009, 13:31
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Problemas con el atributo disabled

joder vaya error tonto, el problema era que en el if utilicé "=" en vez de "==" para comparar :(. Por cierto ¿alguna respuesta para la duda que plantee sobre la variable creada para definir un objeto fuera de la funcion?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 21/04/2009 a las 13:36
  #4 (permalink)  
Antiguo 21/04/2009, 13:50
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Problemas con el atributo disabled

Puedes hacer que la referencia cuelgue del objeto window:
Código javascript:
Ver original
  1. window.boton = document.getElementById("boton_aceptar");
Con eso, ya podrás utilizar "boton" desde cualquier parte.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 21/04/2009, 14:00
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Problemas con el atributo disabled

Por cierto en teoría ¿no sería más adecuado con los estándares usar setAttribute("disabled", "disabled"), así como removeAttribute("disabled") para respetar que el atributo solo tiene contenido cuando es positivo y en caso de ser negativo simplemente ha de omitirse?

http://reference.sitepoint.com/html/input/disabled
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #6 (permalink)  
Antiguo 21/04/2009, 15:13
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problemas con el atributo disabled

Hola:

El uso de setAttribute y getAttribute no es necesario en los atributos "normales", y basta con la sintaxis del punto, y usarlo no garantiza que te funcione en todos los navegadores (el viejo debate)... Puedes probar cambiar el etributo type o incluso crear un atributo name...

Lo que aconsejo es usar siemnpre algo que funcione bien en todos los navegadores...

Además eliminar un atributo, y asignarle un valor false, o null o tal vez undefined es lo mismo... ¿Qué sale de una instrucción: alert(document.body.cualquier_cosa)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 21/04/2009, 18:03
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Problemas con el atributo disabled

¿Y cuales son los atributos "anormales" a parte de type y class?

PD: A mi me funciona en todos los navegadores con setAttribute y removeAttribute... en lo referente al atributo disabled al menos.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #8 (permalink)  
Antiguo 21/04/2009, 23:07
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problemas con el atributo disabled

Cita:
Iniciado por Dude-- Ver Mensaje
¿Y cuales son los atributos "anormales" a parte de type y class?

PD: A mi me funciona en todos los navegadores con setAttribute y removeAttribute... en lo referente al atributo disabled al menos.
Hola:

Pongas o no pongas el disabled, ese atributo no se puede quitar, fíjate en este ejemplo:

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>
	http://www.caricatos.net/probador
</title>

</head>
<body>
<form >
<input type="text" name="pepe" />
<button type="button" onclick="this.form.pepe.removeAttribute('disabled');alert(pepe.disabled + ',' + pepe.cualquier_cosa)">ver</button>
</form>
</body>
</html>
Como verás se obtiene pepe.disabled, y pepe.cualquier_cosa... ese "cualquier_cosa" se supone que es un atributo, que bien podríamos haberlo creado antes con setAttribute('cualquier_cosa', 'hola')... claro que para obtener el valor de ese nuevo atributo se debe usar getAttribute()...

Para liar un poco más la cosa, existe la sintaxis de los corchetes:

this.form.pepe['cualquier_cosa'] = 'hola'; //

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 01:06.