Foros del Web » Programando para Internet » Javascript »

Error de compatibiliadad o programación?

Estas en el tema de Error de compatibiliadad o programación? en el foro de Javascript en Foros del Web. Hola estoy probando unas páginas que he creado usando iframes pero me ha salido un error al probarlos en ie7 y firefox pero no se ...
  #1 (permalink)  
Antiguo 19/01/2009, 17:58
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 4 meses
Puntos: 0
Error de compatibiliadad o programación?

Hola estoy probando unas páginas que he creado usando iframes pero me ha salido un error al probarlos en ie7 y firefox pero no se a que se deba.

Aquí el código que tengo :
Código:
//esto es del iframe
<form action="" method="post" name="file" id="file" > 
<div align="center"> 
<select name="file" size="1">
      <option value="default" selected>A</option>
      <option value="01">B</option>
</select> 

<input type="button" name="Button" value="Filtrar" 
onClick="loadTutorialFile(file[file.selectedIndex].value)"> 
</div> 
</form> 
 <p align="center"> 
<iframe src="dash2008.php" id="tutorialfile" width="1045px" height="600px" align="center" scrolling="yes"></iframe>    

//la función en javascript que carga la página en el iframe
function loadTutorialFile(month) { 
var Ifrm = document.getElementById ? document.getElementById('tutorialfile') : 
document.all ? document.all('tutorialfile') : null;
if (Ifrm) Ifrm.src = (file == 'default') ? 
'dash2008.php' :  'dash2009'; 
}
El código en rojo aparece en la consola de errores de firefox y me marca:"file is not defined ", por lo que no me carga la página pero en ie7 corre bien.
No se a que se deba el error, alguien sabe?
  #2 (permalink)  
Antiguo 20/01/2009, 03:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Error de compatibiliadad o programación?

Código HTML:
<!--esto es del iframe//-->
<form action="" method="post" name="file" id="file" > 
<div align="center"> 
<select name="file" id="file" size="1">
      <option value="default" selected>A</option>
      <option value="01">B</option>
</select> 

<input type="button" name="Button" value="Filtrar" 
onClick="loadTutorialFile(document.getElementById('file')[document.getElementById('file').selectedIndex].value)"> 
</div> 
</form> 
 <p align="center"> 
<iframe src="dash2008.php" id="tutorialfile" width="1045px" height="600px" align="center" scrolling="yes"></iframe>    

<!--la función en javascript que carga la página en el iframe //-->
<script>
function loadTutorialFile(month) { 
var Ifrm = document.getElementById ? document.getElementById('tutorialfile') : 
document.all ? document.all('tutorialfile') : null;
if (Ifrm) Ifrm.src = (document.getElementById('file')[document.getElementById('file').selectedIndex].value == 'default') ? 'dash2008.php' :  'dash2009'; 
}
</script> 

¿?

Quim

Última edición por quimfv; 20/01/2009 a las 03:24
  #3 (permalink)  
Antiguo 20/01/2009, 09:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Error de compatibiliadad o programación?

¿Cuál es la diferencia entre
Cita:
(document.getElementById('file')[document.getElementById('file').selectedIndex].value)
y
Código:
file[file.selectedIndex].value
??

Lo que yo entiendo es que la primera sentencia obtiene el valor del elemento "file" en el índice seleccioando, pero por que lo obtienes 2 veces??
  #4 (permalink)  
Antiguo 21/01/2009, 02:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Error de compatibiliadad o programación?

Cita:
¿Cuál es la diferencia entre

(document.getElementById('file')[document.getElementById('file').selectedIndex].value)
y


file[file.selectedIndex].value

??
Asi salvando la identificacion de file (no se como te funciona directamente sin el document.getElem...) serian equivalentes, si la pregunta es

¿Cuál es la diferencia entre

(document.getElementById('file')[document.getElementById('file').selectedIndex].value)=="default"
y


file=="default"

??

Luego...

Código:
document.getElementById('file')[X].value
Un select es un array por tanto hay que ponerle el indice que quieres para obtener un valor,

Código HTML:
<select name="file" id="file" size="1">
      <option value="default" selected>A</option>
      <option value="01">B</option>
</select> 
en este caso un array con dos valores, pero puedes obtener lo siguiente

Indice::::Value:::::Text
:::0::::::::::default:::::::::A
:::1::::::::::01:::::::::::::::::B

el indice seleccionado que es el que nos interesa lo obtienes de

Código:
document.getElementById('file').selectedIndex
Si se ha selecionado "A" tendiramos que

document.getElementById('file').selectedIndex
es igual a 0

document.getElementById('file')[document.getElementById('file').selectedIndex].value
es igual a document.getElementById('file')[0].value
es igual a "default"

document.getElementById('file')[document.getElementById('file').selectedIndex].text
es igual a document.getElementById('file')[0].text
es igual a "A"



La diferencia importante es que tu tenias

Cita:
file == 'default'
al ser file un array no puede ser igual a un valor.

La funcion se podria simplificar así

Código HTML:
<script>
function loadTutorialFile(month) { 

     //asignacion de objetos del documento a variables
      var Ifrm = document.getElementById('tutorialfile');
      var objfile=document.getElementById('file');

      //condicional para elegir el src del iframe
      Ifrm.src = (objfile[objfile.selectedIndex].value == 'default') ? 'dash2008.php' :  'dash2009'; 
}
</script> 
He quitado el condicional en la asignacion de "Ifrm" puesto que supongo que siempre estara en el documento que llame a esta función, pero si quieres se puede usar. En realidad se usa para evitar un mensaje de error si se llama a esta función des de un documento que no contiene el objeto buscado, pero para que vas a llamar esta funcion si ya sabes que no puede funcionar....

El cambio de "file" a "objfile" no es necesario puesto que una cosa es la variable javascript y otra el objeto del formulario pero yo prefiro no repetir nombres por claridad, de hecho en "Ifrm" tambien lo hacemos puesto que podriamos usar "tutorialfile".


Quim

Última edición por quimfv; 21/01/2009 a las 02:35
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 22:28.