javascript document.write falla

Iniciado por RoxyHana, 31 Julio 2013, 12:29 PM

0 Miembros y 2 Visitantes están viendo este tema.

RoxyHana

Hola! Resulta que tengo el siguiente código:


<div id="usercountpost">
<span id="valor"></span></div>

<script type="text/javascript">
window.onload = function (){
var mens=parseInt(document.getElementById('valor').innerText);
var expe=parseInt(mens*1.6);
var nivel=parseInt(expe/2);
}
</script>
<img src="http://i226.photobucket.com/albums/dd257/RoxyHana/Lyslan_Foro/Iconos/5_zpse406282e.png"/> <script type="text/javascript">document.write(nivel);</script><br/>
<img src="http://i226.photobucket.com/albums/dd257/RoxyHana/Lyslan_Foro/Iconos/4_zpsaaad303d.png"/> <script type="text/javascript">document.write(expe);</script><br/>


El valor del span se rellena gracias a otro script. El caso es que document.write(nivel); y document.write(expe); no me muestran los valores pero si dentro del script pongo alert(nivel); o alert(expe);, si que me muestra lo que necesito!

Por otra parte necesito convertir esto en un bucle ya que tengo varios <span> con la misma id y necesito que haga lo mismo con todas...

¿Alguna idea? Muchas gracias por adelantado!

EFEX

Declara expe, nivel como variables globales y en vez de utilizar innerText probá con innerHTML.
Para generar el bucle necesitas cambiar el nombre del id, no pueden tener el mismo nombre, algo como..

Código (html4strict) [Seleccionar]

<span id="valor-1"></span>
<span id="valor-2"></span>
...


Pero eso ya tendras que ver tu script en como lo podes generar. Con una sentencia for obtenes cada valor, haces la operacion y podes generar un nuevo elemento(div) con cada resultado.
GITHUB 

RoxyHana

#2
No funciona como global tampoco, a lo mejor lo estoy haciendo mal porque acabo de empezar hace poco a estudiar javascript, me resulta más extraño que java...
He probado innerHTML tambien y no funciona...lo extraño me sigue pareciendo que en el alert si funciona, me muestra todo correcto.

El código así tal cual me devuelve expe=1 y nivel=2 en los campos, y en el alert me lo muestra bien, con lo calculado en el script pero si oculto el alert, se me quedan los campos tambien vacíos...las globales dejan de mostrarse.


                               <div id="usercountpost">
<span id="valor"></span></div>

<script type="text/javascript">
var expe=1;
var nivel=2;
window.onload = function (){
var mens=parseInt(document.getElementById('valor').innerText);
expe=parseInt(mens*1.6);
nivel=parseInt(expe/2);
alert('Mensajes: '+mens+' Exp: '+expe+' Nivel: '+nivel);
}
</script>
<img src="http://i226.photobucket.com/albums/dd257/RoxyHana/Lyslan_Foro/Iconos/5_zpse406282e.png"/> <script type="text/javascript">document.write(nivel);</script><br/>
<img src="http://i226.photobucket.com/albums/dd257/RoxyHana/Lyslan_Foro/Iconos/4_zpsaaad303d.png"/> <script type="text/javascript">document.write(expe);</script><br/>

#!drvy

#3
Segun he entendido, lo que te pasa es que no cambian las valores en el document.write pero si cambian en el alert.

Eso te pasa por una sencilla razón:

window.onload = function(), espera a que todo el documento este cargado antes de ejecutarse, mientras que los document.write que pones con las imágenes se ejecutan nada mas se carguen, por tanto, todavía no tienen los valores que se definen dentro de la función.

Yo lo que haría seria esto:
Código (javascript) [Seleccionar]
<div id="usercountpost">
<span id="valor">5</span></div>
<script type="text/javascript">
var expe=1;
var nivel=2;
window.onload = function (){
  var mens=parseInt(document.getElementById('valor').innerText);
  expe=parseInt(mens*1.6);
  nivel=parseInt(expe/2);

  document.getElementById('cantidad_nivel').innerHTML = nivel;
  document.getElementById('cantidad_exp').innerHTML = expe;
  alert('Mensajes: '+mens+' Exp: '+expe+' Nivel: '+nivel);
}
</script>
<img src="http://i226.photobucket.com/albums/dd257/RoxyHana/Lyslan_Foro/Iconos/5_zpse406282e.png"/>
<span id="cantidad_nivel"></span><br/>



<img src="http://i226.photobucket.com/albums/dd257/RoxyHana/Lyslan_Foro/Iconos/4_zpsaaad303d.png"/>
<span id="cantidad_exp"></span><br/>





CitarPor otra parte necesito convertir esto en un bucle ya que tengo varios <span> con la misma id y necesito que haga lo mismo con todas...

HTML esta diseñado SOLO y ÚNICAMENTE para un ID por elemento. Varios ID te arruinan =). Utiliza class y el método getElementsByClassName().

Saludos

EFEX

Si, el maldito onload  ;D, tambien podes crear una funcion y llamarlo...

Código (javascript) [Seleccionar]

var expe;
var nivel;
function MostrarNivelExp(){
    var mens=parseInt(document.getElementById('valor').innerHTML);
    expe=parseInt(mens*1.6);
    nivel=parseInt(expe/2);
}

MostrarNivelExp();
GITHUB 

1mpuls0

Cita de: drvy | BSM en 31 Julio 2013, 22:05 PM
window.onload = function(), espera a que todo el documento este cargado antes de ejecutarse, mientras que los document.write que pones con las imágenes se ejecutan nada mas se carguen, por tanto, todavía no tienen los valores que se definen dentro de la función.

Pero lo más raro es que dice que con una variable si le mostró el resultado xD
abc

RoxyHana

Funciona! pero es curioso porque si borro el alert, deja de funcionar, es decir, se quedan los campos vacíos...yo puse el alert solo para comprobar los valores no necesito que me salga. ¿Por qué pasa eso?

#!drvy

Seguro que no borras nada mas que el alert ? Por que si funciona quitandolo ·_·

Saludos

1mpuls0

#8
Cita de: RoxyHana en 31 Julio 2013, 22:11 PM
Funciona! pero es curioso porque si borro el alert, deja de funcionar, es decir, se quedan los campos vacíos...yo puse el alert solo para comprobar los valores no necesito que me salga. ¿Por qué pasa eso?


Jajaja algo similar me pasó hace tiempo y la solución que le di fue utilizar jquery  :silbar: para mostrar una imagen de cargando.
Pero el problema es el mismo que comenta  drvy | BSM (como se pronuncia? xD)

Edito.
Aunque revisando bien... no tendría porque pasar en este caso D:

Algo debes tener mal.
abc

RoxyHana

Vale, era porque lo ponía en comentario pero al borrarlo si que funciona, mas o menos...me da otros problemas pero intentaré arregarlo por mi cuenta. Si veo que no hay manera volveré por aqui!

Muchas gracias por la ayuda, me sirvió bastante!