Foros del Web » Programando para Internet » Javascript »

agregar evento onclick en internet explorer

Estas en el tema de agregar evento onclick en internet explorer en el foro de Javascript en Foros del Web. Hola a todos, hace un tiempo que uso una funcion javascript que encontre para cambiar el target a _blank de todos los enlaces a los ...
  #1 (permalink)  
Antiguo 16/10/2006, 15:33
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
agregar evento onclick en internet explorer

Hola a todos,

hace un tiempo que uso una funcion javascript que encontre para cambiar el target a _blank de todos los enlaces a los que le aplico rel='externalLink' (cuestion de accesibilidad)... La funcion es bastante sencilla: recorre todos los enlaces de una pagina y si encuentra el atributo rel con el valor externalLink le asigna el valor _blank al atributo target.

Ahora en medio de un desarrollo se me ocurrio utilizar el mismo principio para agregar un muy simple funcion de confirmacion a todos los enlaces que sirvan para borrar algun elemento.
El cambio que tuve que hacer fue minimo y en breves minutos tenia la funcion funcionando a la perfeccion en firefox y en opera. Pero claro... dicha funcion no me funciona en el queridisimo internet explorer.
Investigando, me entere de que el problema es que IE no permite agregar eventos onclick (y no se si algun otro) mediante setAttribute('onclick', 'algo()'), como si permiten otros navegadores.
Hice varias pruebas al respecto (elem.onclick = funcion; - elem.onclick = { funcion} ) y nada, la mayoria funciona en los otros navegadores pero IE sigue ignorandolo olimpicamente. Asi que, despues de recorrer la web de punta a punta buscando una solucion, caigo frente a ustedes para ver si alguien a enfretado el mismo problema y ha encontrado alguna solucion.
El codigo de la funcion que uso es el siguiente:

Código:
function eliminar() 
{
	if (!document.getElementsByTagName) return;
	
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) 
	{
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && anchor.getAttribute("class") == "eliminar")
		{
			anchor.setAttribute('onclick','borraritem()');
		}
	}
}
Una de las soluciones que encontre analizando algunas paginas referidas al DOM fue crear el elemento directamente con la funcion onclick adentro (ejemplo: document.write("<a href='#' onclick='algo()'>borrar</a>"); ).
Pero como yo no tengo que crear el elemento, sino simplemente agregarle la funcion, no me sirve. Asi que pense en volver a crear el enlace directamente con javascript (borrar y volver a crear), pero todavia no he dado con algo que funcione.

Desde ya agradesco cualquier ayuda de su parte.
__________________
oohh... quisiera ser godines!!!
  #2 (permalink)  
Antiguo 16/10/2006, 16:51
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
bueno.. una vez, despues de tanto buscar, me di cuenta que el problema no estaba donde lo buscaba!
El problema era que en el condicional usaba anchor.getAttribute("class") y en IE eso debe llamarse asi: anchor.getAttribute("className").
Cambiando eso, la funcion funciona con solo aplicar: anchor.onclick = funcion;

De todos modos, entre tanto se me ocurrio que si en algun momento necesito aplicar una funcion que necesite un parametro (que de esta forma no me lo permite), en vez de agregar el atributo onclick, simplemente tengo que cambiar el href para llamar la funcion a traves de el.
__________________
oohh... quisiera ser godines!!!
  #3 (permalink)  
Antiguo 17/10/2006, 07:24
 
Fecha de Ingreso: octubre-2006
Mensajes: 24
Antigüedad: 17 años, 6 meses
Puntos: 0
Hola safe, pues yo tambien sufro del mismo problema tengo una funcion que en cuanquier navegador funciona perfecto, menos en IE, el problema es que lo mas seguro es que se use este navegador, nada mas que lo estoy haciendo en java script y php
Código HTML:
<script language="JavaScript">
function agregar()
{
	x=document.getElementById("tabla");
	fila1=x.insertRow(filas+1);
	++filas;
	columna1=fila1.insertCell(0);
	columna2=fila1.insertCell(1);
	columna3=fila1.insertCell(2);
	columna4=fila1.insertCell(3);
	columna5=fila1.insertCell(4);
	columna1.innerHTML="";
	
	columna2.innerHTML=document.getElementById("peso").value+"<input type='text' name='peso"+filas+"' value='"+document.getElementById("peso").value+"' style='display:none'>";
	columna3.innerHTML=document.getElementById("producto").options[document.getElementById("producto").selectedIndex].text+"<input type='text' name='producto"+filas+"' value='"+document.getElementById("producto").value+"' style='display:none'>";
	columna4.innerHTML=document.getElementById("cantidad").value+"<input type='text' name='cantidad"+filas+"' value='"+document.getElementById("cantidad").value+"' style='display:none'>";
	columna5.innerHTML=document.getElementById("cfaltante").value+"<input type='text' name='faltante"+filas+"' value='"+document.getElementById("cfaltante").value+"' style='display:none'>";
	document.getElementById("principal").elements.filas.value=filas;
	if(filas!=0)
	{
		x.style.visibility="visible";
	}
	document.getElementById("receteable").reset();
}
function enviar()
{
	if(filas!=0)
	{ 
		if(confirm("¿Desea enviar la factura?"))
		{
			x=document.getElementById("principal");
			x.elements.folio.value=document.getElementById("folio").value;
			x.elements.fecha.value=document.getElementById("fecha").value;
			x.submit()
		}
	}
	else
	{
		alert("Agrege productos");
	}
}
filas=0;
</script>


Bueno lo que hace es que te va agregando una tabla dinámicamente, es para una factura. Y como sabes en una factura no siempre se va a tomar el mismo pedido por asi decirlo. entonces bueno a la hora de llamarlo lo que hago es esto en html:

<input type="button" onClick="javascript:enviar();" value="Enviar">

Como le puedo hacer para que el IE me haga bien la funcion?? Espero me puedas ayudar, muchas gracias, saludos.
  #4 (permalink)  
Antiguo 17/10/2006, 10:59
 
Fecha de Ingreso: octubre-2006
Mensajes: 24
Antigüedad: 17 años, 6 meses
Puntos: 0
POr finn!!!

Ya por fin se soluciono el problema, solo tenia que cambiar la llamada en el html por esto
Código HTML:
<input type="button" onclick="window.enviar()" value="Enviar" > 
  #5 (permalink)  
Antiguo 17/10/2006, 19:46
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 3 meses
Puntos: 10
hola,

acabo de entrar y veo que ya lo solucionaste... me alegra haberte sido de tanta utilidad
__________________
oohh... quisiera ser godines!!!
  #6 (permalink)  
Antiguo 21/05/2011, 06:33
 
Fecha de Ingreso: mayo-2011
Ubicación: santa marta
Mensajes: 5
Antigüedad: 13 años
Puntos: 0
Respuesta: agregar evento onclick en internet explorer

Cita:
Iniciado por safe Ver Mensaje
hola,

acabo de entrar y veo que ya lo solucionaste... me alegra haberte sido de tanta utilidad
hola que mas yo tengo un problema parecido y no he podido solucionar si me colaboras seria chevere

yo tengo que crear unas tablas con minimo de 10 campos o fila por lo que tenia que colocar los links que permitieran accesar al resto de los datos es decir que los ubicaba de 10 en 10... para resolver esto estaba probando con un codigo sencillo que funciona en firefox pero toco cambiarlo todo al momento de pasar a ie... lo que no he podido resolver es como colocar el evento onclick
yo hacia
var newAttr3 = document.createAttribute("onClick");
newAttr3.nodeValue = "hi("+i+",10)";
indice.setAttributeNode(newAttr3);


donde hi es el nombre de la funcion, i es una variable contadora y 10 es el numero de tablas por asi decirlos
  #7 (permalink)  
Antiguo 21/05/2011, 06:34
 
Fecha de Ingreso: mayo-2011
Ubicación: santa marta
Mensajes: 5
Antigüedad: 13 años
Puntos: 0
Respuesta: agregar evento onclick en internet explorer

este es el codigo completo de lo estoy haciendo si es que he cometido algun error me gustaria mucho sus correcciones gracias:

Código javascript:
Ver original
  1. <script language="javascript" type="text/javascript">
  2. function hi(i,z){
  3. for (h=1;h<=z;h++)//donde z es el numero de listas q se van a mostrar
  4. {var p=document.getElementById(h);
  5. p.style.setAttribute('display','none');
  6. }
  7. var p=document.getElementById(i);
  8. p.style.setAttribute('display','') }
  9.  
  10. function hola()
  11. {
  12. var div;
  13. var p ;
  14. for (i=1;i<=10;i++)
  15. {
  16. var p1 = document.createElement("p");
  17. var texto = document.createTextNode("este es el bloque :"+ i);
  18. p1.appendChild(texto);
  19. p1.style.setAttribute('color','#CC0000');
  20. var div = document.createElement("div");
  21. div.appendChild(p1);
  22. div.style.setAttribute('display','none');
  23. var newAttr2 = document.createAttribute("id");
  24. newAttr2.nodeValue = i;
  25. div.setAttributeNode(newAttr2);
  26. document.getElementById("junior").appendChild(div);
  27. var indice= document.createElement("label");
  28. var texto2 =document.createTextNode(i+" ");
  29. indice.appendChild(texto2);
  30. //var newAttr3 = document.createAttribute("onClick");
  31. //newAttr3.nodeValue =
  32. //indice.setAttributeNode(newAttr3);
  33. indice.onclick= "hi("+i+",10)";
  34. var p2=document.getElementById('junior2');
  35. p2.appendChild(indice);
  36. } }
  37. </script>

Última edición por juniorjmd; 22/05/2011 a las 06:54
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 20:09.