Foros del Web » Programando para Internet » Javascript »

Problema con a href

Estas en el tema de Problema con a href en el foro de Javascript en Foros del Web. Hola a todos, Estoy haciendo una aplicación, y desde un javascript cargo un trozo de mi página de la siguiente manera: ...... var href3 = ...
  #1 (permalink)  
Antiguo 12/03/2006, 11:26
 
Fecha de Ingreso: agosto-2005
Mensajes: 22
Antigüedad: 18 años, 8 meses
Puntos: 0
Problema con a href

Hola a todos,

Estoy haciendo una aplicación, y desde un javascript cargo un trozo de mi página de la siguiente manera:

......
var href3 = document.createElement("a");
href3.appendChild(document.createTextNode(" --- Leer Más --- "));
href3.setAttribute('href','#');
href3.onclick=mostrarActividadCompleta(cod);
contents.appendChild(href3);


var sigLinea = document.createElement("p");
contents.appendChild(sigLinea);
.......

Tengo dos problemas:

El primero y mas grave es que cuando al ponerle el href.onclick a un método javascript, a este método le llama cuando escribe la página, es decir, cuando se carga este código, llama a este método, por lo que se me sobreescribe la página con el método mostrarActividadCompleta.

El segundo problema es que con Firefox no me sale el salto de linea despues del href.

¿Alguien me puede ayudar?Saludos, kemmotar
  #2 (permalink)  
Antiguo 12/03/2006, 11:58
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola kemmotar:

Por lo que veo estás usando un enlace sin tener la intención de enlazar, y al usar "#" estás enlazando a la misma página... Creo que más te podría interesar usar cualquier otro tag si solo quieres usar un script: (span onclick=)

Y para usar los eventos creo que tendrías que llamarlos sin parámetros o como una cadena...

href3.onclick="mostrarActividadCompleta";

En realidad es más compleja la forma estándar y no se permiten parámetros (Busca addEventListener y attachEvente)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 12/03/2006, 13:53
 
Fecha de Ingreso: agosto-2005
Mensajes: 22
Antigüedad: 18 años, 8 meses
Puntos: 0
Gacias por la contestación.

El primer problema que he comentado por lo que veo no es por el a href, si no que tambien me pasa si lo cambio a span onclick. Lo que no se me ocurre es como le hago saber al método mostrarActividadCompleta el código de actividad que tiene que mostrar., ya que parece que es debido al parámetro que le paso.

Saludos, kemmotar

PD: Perdona si son cosas básicas, pero soy nuevo en esto de javascript
  #4 (permalink)  
Antiguo 12/03/2006, 14:16
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Con javascript puedes declarar variables "globales" y puedes usarlas con esos métodos...

var cod = 0;

function mostrarActividadCompleta() {
procesa(cod);
}

Hay muchas formas de conseguir recoger variables sin declararlas...
Si muestras lo que hace mostrarActividadCompleta tal vez te podamos ayudar mejor (tampoco es necesario mucho detalle.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 13/03/2006, 09:02
 
Fecha de Ingreso: agosto-2005
Mensajes: 22
Antigüedad: 18 años, 8 meses
Puntos: 0
Hola,

Esto es más o menos lo que hago:

Tengo unos parámetros de búsqueda en un menú, que al seleccionar algunos y darle al botón mostrar llama al método mostrarActividades. Este método implementa una solución AJAX, por lo que hace una llamada asíncrona a un servlet y este le devuelve un xml, el cuál se encarga de mostrarlo el método getActividades():

var actividades = req.responseXML.getElementsByTagName("actividad");
var num = actividades.length;
var contents = document.getElementById("Content");
contents.innerHTML = "";
......
for (.....){
.....
var href3 = document.createElement("span");
href3.appendChild(document.createTextNode(" --- Leer Más --- "));
href3.onclick=mostrarActividadCompleta(cod);
contents.appendChild(href3);
}

El método mostrarActividadCompleta es muy parecido al método mostrarActividades (también es Ajax), y se encarga de pinchada una actividad mostrar información más detallada de esta siguiendo el mismo método. El problema es que cuando se ejecuta el script de mostrarActividades llega al método mostrarActividaCompleta y en vez de poner un span y esperar a ser pinchado, se ejecuta seguidamente, sobreescribiendo la información anterior.

Espero que este todo claro. Gracias anticipadas.

Saludos, kemmotar
  #6 (permalink)  
Antiguo 13/03/2006, 11:30
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Si necesitas el parámetro, puedes probar poner un paso intermedio para que lea el id...

Fíjate en este ejemplo:

Código:
<html>
<head>
<title>
	prueba
</title>
<script type="text/javascript">
valor = 0;
function muestraid() {
	alert(this.id);
}

function crearBotton() {
	b = document.createElement("button");
	b.id = "valor" + valor++;
	b.onclick = muestraid;
	document.body.appendChild(b);
	t = document.createTextNode("pincharme")
	b.appendChild(t);
}
</script>
</head>
<body >
<input type="button" onclick="crearBotton()" value="prueba" />
</body>
</html>
Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 14/03/2006, 15:54
 
Fecha de Ingreso: agosto-2005
Mensajes: 22
Antigüedad: 18 años, 8 meses
Puntos: 0
Ya siento ser pesado con el mismo tema, pero sigo sin encontrar una solución.

He estado probando, y el fallo no se debe tampoco al paso de parámetros, por lo que si no es debido a esto ni tan poco a la etiqueta html que llame, el fallo tiene que venir derivado del método onclick.

En mi código hago por ejemplo:

var titulo = document.createElement("h1");
var span = titulo.appendChild(document.createElement("span")) ;
span.onclick = myclick();
span.appendChild(document.createTextNode(nombre));


contents.appendChild(titulo);

y el método al que llamo en el evento onclick se me ejecuta una vez que se carga el código.

¿a alguien le ha pasado lo mismo o sabe solucionarlo?¿alguien sabe optra manera de hacer lo mismo sin utilizar el evento onclick()?

Gracias de antemano. Saludos, kemmotar
  #8 (permalink)  
Antiguo 14/03/2006, 17:22
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

El ejemplo que te puse funcionaba bien... ¡No pongas los paréntesis!... y nos cuentas...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #9 (permalink)  
Antiguo 15/03/2006, 10:11
 
Fecha de Ingreso: agosto-2005
Mensajes: 22
Antigüedad: 18 años, 8 meses
Puntos: 0
Muchisimas gracias!!

Al quitar los parentesis y el parametro y ponerlo tal y como me has dicho funciona bien:

b.id = "valor" + valor++;
b.onclick = muestraid;

La verdad que esto es un conocimiento que se me escaba como programador novel en javascript. A partir de esta soluc´´on me surge una duda, a ver si m la puedes resolver.

Según esta solución mis antiguos métodos mostrar(id) han pasado a ser mostrar(). ¿Hay alguna manera de poder pasar el parametro id en html/jsp para que funcione este método también al utilizarlo sin javascript?

PD: Otr pregunta que no viene a cuento, pero lo necesito ¿Cómo se ponen espacios en blanco en el CreateTextNode?

Saludos, y de nuevo muchas gracias, kemmotar

Última edición por kemmotar; 15/03/2006 a las 11:01
  #10 (permalink)  
Antiguo 15/03/2006, 11:36
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Las formas que conozco son la que tu también conoces, además de la forma que recomiendan DOM (addEventListener) y su versión microchoff (attachEvent), y todas manejan el método como una cadena, así que no se me ocurre...

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 02:23.