Foros del Web » Programando para Internet » Javascript »

Enable a todos los elementos dentro de un div

Estas en el tema de Enable a todos los elementos dentro de un div en el foro de Javascript en Foros del Web. Hola amigos estoy intentando hacer esto pero no se como hacerlo, tengo unas funciones que muestran y ocultan divs. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver ...
  #1 (permalink)  
Antiguo 15/05/2011, 09:08
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Enable a todos los elementos dentro de un div

Hola amigos estoy intentando hacer esto pero no se como hacerlo, tengo unas funciones que muestran y ocultan divs.

Código Javascript:
Ver original
  1. function mostrardiv(name) {
  2.     div = document.getElementById(name);
  3.     div.style.display = '';
  4. }
  5. function cerrar(name) {
  6.     div = document.getElementById(name);
  7.     div.style.display='none';
  8. }

muy sencillas, pero como todos los divs estan hay con inputs dentro, al mandar submit pues me manda resultados vacios, por eso les he puesto la propiedad disabled en todos los input que estan dentro de los divs ocultos.

AHORA mi labor dificil, pues soy una birria en javascript, quiero que al llamar a la función mostrar div acceder a las propiedades disabled y volverlas false, o sea habilitarlas, pero no se como , agradeceré cualquier ayuda o pista.
  #2 (permalink)  
Antiguo 15/05/2011, 10:41
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Enable a todos los elementos dentro de un div

buenas,
a partir de la referencia del div que ya tienes en una variable, invoca la funcion getElementsByTagName pasandole como parametro el nombre del elemento. la funcion te devolvera una coleccion (dato similar a un aray) el cual puedes recorrer para habilitar o inhabilitar el campo. notese que la funcion no te va tomar todos los tipos de controles. es decir, con <input> te toma todos sin importar el tipo, pero queda descartado otros controles como <textarea> o <select>.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 15/05/2011, 13:03
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: Enable a todos los elementos dentro de un div

Hola a ver he intentado hacer lo que me dices haciendo esto:

Código Javascript:
Ver original
  1. function mostrardiv(name) {
  2.     div = document.getElementById(name);
  3.     div.style.display = '';
  4.     var tag = document.getElementsByTagName(div);
  5.     for(var i in tag){
  6.         document.write(tag[i]);
  7.     }
  8. }

y me da este resultado

0function item() { [native code] }function namedItem() { [native code] }



como diferencio de eso los elementos de mi div?

esto es lo que contienen mis divs dinámicos. a lo mejor les dice algo

Código HTML:
<div id="enlace1">
    <fieldset>
        <legend>Link 1</legend>
        <table>
            <tr><td>Servidor</td><td><select name="servidor1">
                        <option value="">Seleccionar</option>

                        <option value="megaupload">Megaupload</option>
                        <option value="rapidshare">Rapidshare</option>
                        <option value="mediafire">Mediafire</option>
                    </select></td></tr> <tr><td>Enlace</td><td><input type="text" name="link1" value=""  /></td></tr> <tr><td>Peso</td><td><input type="text" name="peso1" value=""  /></td></tr> <tr><td>formato</td><td><select name="formato1">
                        <option value="">Seleccionar</option>
                        <option value="avi">AVI</option>

                        <option value="mkv">MKV</option>
                        <option value="mp4">MP4</option>
                    </select></td></tr> </table>
        <div id="mostrarDiv" class="right-boton"><a href="javascript:mostrardiv('enlace2');">agregar otro enlace</a></div>
    </fieldset>
</div> 
  #4 (permalink)  
Antiguo 15/05/2011, 15:50
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Enable a todos los elementos dentro de un div

notese el ejemplo de getElementsByTagName, dicho metodo es invocado desde la referencia de un elemento y a dicho metodo se le pasa como parametro un string que es el nombre de un tag a capturar que esta dentro de esa referencia. en el ejemplo
Código:
var table = document.getElementById("forecast-table"); 
// table es la referencia de un elemento con ID #forecast-table;
var cells = table.getElementsByTagName("td"); 
// desde table se invoca el metodo y se le pasa un nombre de un elemento ;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 15/05/2011, 17:23
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años
Puntos: 87
Respuesta: Enable a todos los elementos dentro de un div

Cita:
div.style.display = '';
Dejarlo vacio no es lo mas recomendable, lo mejor es darle el atributo que necesita (para divs usualmente es "block")

Si lo que quieres es HABILITAR los input dentro del div (quitarles 'disabled="disabled"') es asi:

Código Javascript:
Ver original
  1. function mostrardiv(name) {
  2.         div = document.getElementById(name);
  3.         div.style.display = 'block';
  4.         inputs = div.getElementsByTagName('input');
  5.         for (i in inputs){
  6.               inputs[i].removeAttribute("disabled",0);
  7.         }
  8.     }

En html
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Test</title>
  5. <script type="text/javascript">
  6. window.onload = function(){
  7. mostrardiv("myDIV");
  8. function mostrardiv(name) {
  9.         div = document.getElementById(name);
  10.         div.style.display = 'block';
  11.         inputs = div.getElementsByTagName('input');
  12.         for (i in inputs){
  13.               inputs[i].removeAttribute("disabled",0);
  14.         }
  15.     }
  16. }
  17.  
  18. </head>
  19. <div style="display:none; background-color:#0C0;" id="myDIV"><form><input id="txt" name="algo" type="text" disabled="disabled"  /></form></div>
  20. </body>
  21. </html>
-------------
Si lo que necesita es PONERLE disabled (o sea desabilitarlo) simplemente remplaze removeAttribute("disabled",0); por setAttribute('disabled', 'disabled');

-------------
Para hacerlo con elementos SELECT en vez de elementos INPUT simplemente en vez de hacer esto:
Cita:
inputs = div.getElementsByTagName('input');
Hace esto:
Cita:
inputs = div.getElementsByTagName('select');
  #6 (permalink)  
Antiguo 15/05/2011, 18:28
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: Enable a todos los elementos dentro de un div

vaya muchisimas gracias, yo habia hecho un sistema supercomplejo que funcionaba pero era un enredo, con id's super dinamicos y un embrollo, solo una pregunta por que si hago esto:

Código Javascript:
Ver original
  1. function mostrardiv(name) {
  2.     div = document.getElementById(name);
  3.     div.style.display = 'block';
  4.     inputs = div.getElementsByTagName('select');
  5.     for (b in inputs){
  6.         inputs[b].removeAttribute("disabled",0);
  7.     }
  8.     select = div.getElementsByTagName('input');
  9.     for (a in select){
  10.         select[a].removeAttribute("disabled",0);
  11.     }
  12. }

solo habilita uno de los dos, el que este primero.

+ karma por el empujonsisimo me habia llevado todo el día.
  #7 (permalink)  
Antiguo 15/05/2011, 18:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Enable a todos los elementos dentro de un div

buenas,
personalmente, desaconsejo el uso del bucle for/in en estructuras indexadas (arrays, colecciones o similares). ¿por que? porque for/in en realidad itera por todas las propiedades visibles de la estructura. de modo que si estas trabajando con cada uno de los elementos donde todos tienen una interfaz, al encontrarse con la propiedad que no implementa la interfaz genera fallo. es lo que te esta sucediendo en el codigo. getElementsByTagName devuelve una coleccion de elementos (parecido a un array) donde todos los elementos son referencias a elementos HTMLElement y adicional tiene la propiedad length que es visible en un bucle for/in. como sabras, length no tiene la misma interfaz que HTMLElement. personalmente usaria un bucle for normal.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 15/05/2011, 18:58
 
Fecha de Ingreso: noviembre-2005
Mensajes: 426
Antigüedad: 19 años
Puntos: 87
Respuesta: Enable a todos los elementos dentro de un div

Eso probablemente es por que "for (a in select)" no es valido en este caso... en javascript cuando se trabajan con arrays/grupos de objetos lo mejor es hacer el for 'clasico'.. yo lo utilize en este ejemplo para reutilizar tu código pero fue un error :/

Código Javascript:
Ver original
  1. function mostrardiv(name) {
  2.    
  3.    div = document.getElementById(name);
  4.    div.style.display = 'block';
  5.    inputs = div.getElementsByTagName('select');
  6.    for (var i=0; i<inputs.length;i++){
  7.       inputs[i].removeAttribute("disabled",0);
  8.    }
  9.       selectx = div.getElementsByTagName('input');
  10.       for (var a=0; a<inputs.length;a++){
  11.       selectx[a].removeAttribute("disabled",0);
  12.    }
  13. }
  #9 (permalink)  
Antiguo 15/05/2011, 19:05
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: Enable a todos los elementos dentro de un div

U.U pues estee s mi código y sigue pasando lo mismo. siento ser tan pesado.

Código Javascript:
Ver original
  1. function mostrardiv(name) {
  2.     div = document.getElementById(name);
  3.     div.style.display = 'block';
  4.     inputs = div.getElementsByTagName('input');
  5.     for (var i=0;i<=inputs.length;i++){
  6.         inputs[i].removeAttribute("disabled",0);
  7.     }
  8.     select = div.getElementsByTagName('select');
  9.     for (var a=0;a<=select.length;a++){
  10.         select[a].removeAttribute("disabled",0);
  11.     }
  12. }

Edito: segun lo que veo así tambien lo puso el buen InkarC.
  #10 (permalink)  
Antiguo 15/05/2011, 19:35
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Enable a todos los elementos dentro de un div

fijate en la condicion de los FORs, dice menor o igual. de modo que si tienes 4 elementos en la coleccion, partiendo desde 0 hasta el 4 tienes 5 posiciones lo cual no coincide con la lontigud de la coleccion. la condicion deberia ser menor que.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 15/05/2011, 19:54
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: Enable a todos los elementos dentro de un div

:S solo por eso ¬¬ muchas gracias zerokilled ha quedado perfect.

pero me sorprende que solo por eso no funcionara.
  #12 (permalink)  
Antiguo 15/05/2011, 19:55
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: Enable a todos los elementos dentro de un div

:S solo por eso ¬¬ muchas gracias zerokilled ha quedado perfect.

pero me sorprende que solo por eso no funcionara.
  #13 (permalink)  
Antiguo 15/05/2011, 20:24
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Enable a todos los elementos dentro de un div

Cita:
Iniciado por memoadian Ver Mensaje
pero me sorprende que solo por eso no funcionara.
claro, porque estas seleccionando un elemento en la coleccion que no existe. de modo que devuelve undefined. realmente ahi no es el error, sino cuando intentas invocar un metodo o propiedad de undefined el cual no existe.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: elementos
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 00:51.