• Publicidad

Función externa no hace lo que debería

Discute todo acerca de JavaScript así como DHTML o la tecnología AJAX.

Función externa no hace lo que debería

Notapor yarboblo » 2011-09-12 17:55 @788

Hola, en el siguiente programa me aparece la ventana de alert() pero me sale vacía en lugar de indicar el dato que le pido (height). ¿Alguien puede echarme un cable?

HTML:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2. "http://www.w3.org/TR/html4/strict.dtd">
  3.  
  4. <html>
  5. <head>
  6. <title></title>
  7.  
  8. <link rel="stylesheet" href="estilo.css" type="text/css" media="screen"></link>
  9. <script type="text/javascript" src="biblioteca.js"></script>
  10.  
  11. </head>
  12.  
  13. <body>
  14.  
  15. <div id="bloqcent">
  16.  
  17. <ul id="departamentos">
  18. <li id="departienda">TIENDA</li>
  19. <li id="deparreparaciones">REPARACIONES</li>
  20. </ul>
  21.  
  22. <div id="cuerpo">cuerpo
  23. <div id="tienda" name="hola"></div>
  24. <div id="reparaciones"></div>
  25. </div>
  26. </div>
  27.  
  28. </body>
  29. </html>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



CSS:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. #bloqcent{float:left;
  2. width:70%;
  3. }
  4.  
  5.  
  6. #departamentos li{float:left;
  7. width:20%;
  8. height:25px;
  9. text-align:center;
  10. margin-right:1%;}
  11.  
  12. #cuerpo{clear:left;
  13. border:1px solid black;
  14. height:300px;}
  15.  
  16. #tienda{height:100px;background-color:orange;display:block;}
  17. #reparaciones{height:100px;background-color:blue;display:block;}
  18.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



JS:
Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1. function cambiardepar()
  2. {
  3. var nombre=document.getElementById("tienda");
  4. alert(nombre.style.height);
  5. }
  6.  
  7. window.onload = function()
  8. {
  9. document.getElementById("departienda").onclick = cambiardepar;
  10. document.getElementById("deparreparaciones").onclick =cambiardepar;
  11. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



En este otro caso veo que me funciona la cosa utilizando getElementById() pero no usando getElementsByName(). ¿Qué estoy haciendo mal?

(El HTML y CSS son los mismos que los anteriores)

JS (sí funciona):

Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1. function cambiardepar()
  2. {
  3. document.getElementById("tienda").style.display="none";
  4. }
  5.  
  6. window.onload = function()
  7. {
  8. document.getElementById("departienda").onclick = cambiardepar;
  9. document.getElementById("deparreparaciones").onclick =cambiardepar;
  10. }
  11.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



JS (no funciona):

Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1. function cambiardepar()
  2. {
  3. document.getElementsByName("hola").style.display=" none";
  4. }
  5.  
  6. window.onload = function()
  7. {
  8. document.getElementById("departienda").onclick = cambiardepar;
  9. document.getElementById("deparreparaciones").onclick =cambiardepar;
  10. }
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



A ver si alguien puede sacarme de dudas. Gracias.
yarboblo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-09-12 17:49 @784

Publicidad

Re: Función externa no hace lo que debería

Notapor explorer » 2011-09-13 07:10 @340

El problema es que .style se refiere al estilo que tiene el objeto, pero NO al estilo heredado del CSS.

Hay que hacer otra cosa para acceder a los estilos CSS.

El siguiente código sí que me funciona en Firefox:

Sintáxis: [ Descargar ] [ Ocultar ]
Using javascript Syntax Highlighting
  1. function cambiardepar()
  2. {
  3.   var mysheet = document.styleSheets[0];                // Accedemos a la primera hoja de estilos CSS
  4.   for (i=0; i<mysheet.cssRules.length; i++) {           // Buscamos por todas sus reglas
  5.     if (mysheet.cssRules[i].selectorText == "#tienda"){ // Busca la regla que se llama "#tienda"
  6.       tienda_css = mysheet.cssRules[i];                 // Accedemos al objeto que guarda los estilos de '#tienda'
  7.       break;
  8.     }
  9.   }
  10.  
  11. alert("Altura: " + tienda_css.style.height);            // Del objeto, accedemos a la propiedad 'height'
  12. }
  13.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información aquí y aquí.

Atención, que en Explorer se accede con rules[]. Mira el segundo enlace.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Función externa no hace lo que debería

Notapor yarboblo » 2011-09-13 07:31 @354

Gracias explorer, pero no lo entiendo.
Height no es un estilo heredado de un elemento padre, está definido directamente como atributo de "tienda". Además, ¿por qué sí puedo acceder a cambiarle "display" y no a "height"??
yarboblo
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-09-12 17:49 @784

Re: Función externa no hace lo que debería

Notapor explorer » 2011-09-13 07:55 @371

Humm... pues, la verdad, no lo sé...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a JavaScript

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados