Foros del Web » Programando para Internet » Javascript »

Aplicar función javascript para todos los enlaces

Estas en el tema de Aplicar función javascript para todos los enlaces en el foro de Javascript en Foros del Web. Hola!! Estoy curioseando con mi foro phpBB y le estoy implantando un poco de Ajax, para ello uso un código javascript que se debe aplicar ...
  #1 (permalink)  
Antiguo 14/02/2010, 11:06
 
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 3 meses
Puntos: 0
Aplicar función javascript para todos los enlaces

Hola!!

Estoy curioseando con mi foro phpBB y le estoy implantando un poco de Ajax, para ello uso un código javascript que se debe aplicar a los vínculos para que funcione, son de la siguiente manera:

Código:
<a href="javascript:llamarasincrono('pagina.htm')">Enlace</a>
Me gustaría que todos los links del menú e interfaz del foro se ejecutaran bajo esta función, pero el problema esque hay muchos y sería muy difícil y costoso ir cambiando uno por uno.

Mi pregunta es la siguiente: ¿Sería posible aplicar esta función automáticamente a todos los links de la página sin tener que modificar manualmente cada enlace?

Muchas gracias ;)
  #2 (permalink)  
Antiguo 14/02/2010, 11:46
Avatar de alor86  
Fecha de Ingreso: abril-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 5
Respuesta: Aplicar función javascript para todos los enlaces

lo puedes hacer asi
Código Javascript:
Ver original
  1. var links = document.getElementsByTagName('a');
  2. for(var i = 0; i<links.length;i++){
  3.        links[i].onclick=llamarasincrono;
  4. }
  #3 (permalink)  
Antiguo 15/02/2010, 11:09
 
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Aplicar función javascript para todos los enlaces

Gracias alor, pero no escribí al completo el modelo de enlace de javascript. Creo que no cambiará mucho tu respuesta...

Código:
<a href="javascript:llamarasincrono('pagina.html', 'barent')">Enlace</a>
'barent' debe estar siempre, es lo que no puse en mi post...

¿Cómo se quedaría al fin el código?

Última edición por adhemo; 15/02/2010 a las 11:15
  #4 (permalink)  
Antiguo 15/02/2010, 15:41
Avatar de alor86  
Fecha de Ingreso: abril-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 5
Respuesta: Aplicar función javascript para todos los enlaces

Código Javascript:
Ver original
  1. var links = document.getElementsByTagName('a');
  2. for(var i = 0; i<links.length;i++){
  3.        links[i].onclick=function(){ llamarasincrono('pagina.html', 'barent') };
  4. }
__________________
Cada vez que toco mi código, doy a luz a diez nuevos bugs
  #5 (permalink)  
Antiguo 15/02/2010, 16:19
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
Puntos: 1485
Respuesta: Aplicar función javascript para todos los enlaces

@alor86,
queria comentar que en tu ejemplo todos los enlaces abren siempre el mismo documento, 'pagina.html'. en lugar de un string literal deberia leer la propiedad href de dicho enlace. una forma es con this.href.

@adhemo,
opino que tienes un problema mayor para implementar dicha funcionalidad: identificar que enlaces son de la interfaz de tu sitio y cuales no. dependiendo a que exactamente te refieres, si aplicar la funcionalidad absolutamente a todos los enlaces de la interfaz o si solo a una parte de la interfaz (menu y alguna otra seccion), pues tienes diferentes formas de enfocarse. el ejemplo de alor86 aplica la funcion a todos los enlaces sin excepcion alguna. si te funciona, pues bien. sino, yo lo haria de la siguiente forma.

primero, aplicar la funcion enlace por enlace no me parece optimo. podemos sacarle ventaja al modelo de eventos para aplicar de una sola vez la funcion a todo el documento o seccion en particular. y segundo, con funciones basicas de busqueda se podria determinar si el enlace apunta a tu sitio o uno externo, y bajo esta condicion se invoca tu funcion AJAX.

Código:
// direccion del sitio web;
var site_address = 'http://www.forosdelweb.com/';

// funcion que determina si el enlace es local e invoca AJAX;
function localLink(evt){
var link = evt.target || evt.srcElement;
if(/^a$/i.test(link.nodeName) && (new RegExp('^' + site_address)).test(link.href)){ 
llamarasincrono(link.href, 'barent');
try{
evt.preventDefault();
}catch(error){
evt.returnValue = false;
}}}

// aqui se usa el objeto document para aplicar el evento a todo el documento;
// pero tambien puede ser a uno o varios elementos de tu preferencia;
try{
document.addEventListener('click', localLink, false);
}catch(e){
document.attachEvent('onclick', localLink);
}
no he comprobado el codigo pero estoy casi seguro que debe funcionar.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 15/02/2010 a las 16:35
  #6 (permalink)  
Antiguo 15/02/2010, 16:29
Avatar de alor86  
Fecha de Ingreso: abril-2009
Mensajes: 110
Antigüedad: 15 años
Puntos: 5
Respuesta: Aplicar función javascript para todos los enlaces

si ya se que el ejemplo aplica la funcionadlidad a todos los enlaces pero solo lo hice como ejemplo no pretendo hacer todo el trabajo pero gracias por la observacion y como digo solo lo puse como ejemplo
__________________
Cada vez que toco mi código, doy a luz a diez nuevos bugs
  #7 (permalink)  
Antiguo 15/02/2010, 17:01
 
Fecha de Ingreso: febrero-2010
Mensajes: 19
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Aplicar función javascript para todos los enlaces

Buffffff ZeroKilled....... COMO AGRADECERTELO???? ha sido tan sólo copiar y pegar el código y ha funcionado a la primera.... eres UN HACHA, UN HACHA!!!! Muchisisisisisismas gracias por haberte molestado en calentarte la cabeza y crearme el código.

Muchas gracias a ti tambien alor86, tu código también me ha servido para otra página más simple que tenía que hacer también.

Vaya dos ases, muchas gracias ;)

Última edición por adhemo; 15/02/2010 a las 18:20

Etiquetas: enlaces
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 21:58.