2010-09-13 10 views
8

He intentado hacer esto, pero no parecía funcionar:¿Cómo agrego un evento onclick a etiquetas html sin identificación usando javascript?

window.onload = initAll; 


    function initAll(){ 
    document.getElementsByTagName('a').onclick = clickHandler; 
    } 

    function clickHandler(){ 
     if(this.toString().indexOf("localhost") < 0) { 
      confirmation = confirm("You are now leaving http://soso.com. Please click 'ok' to continue to this site, or 'cancel' to stay in http://soso.com"); 
       if (confirmation == false){ 
        return false; 
       } 

     } 

    } 

Sé que puedo GetElementByID y que funciona, pero no funciona de esta manera. Cualquier ayuda sería apreciada.

Gracias!

+2

¿'document.getElementsByTagName' devuelve una matriz? Es posible que deba recorrer esa matriz devuelta y asignarle el controlador. – danjah

+1

JQuery fue diseñado específicamente para este tipo de trabajo. ¿Puedes usar Jquery? – StriplingWarrior

+0

Estaba considerando jquery para insertar el controlador onclick si no hubiera una solución más simple, sí. – Graham

Respuesta

1

Necesitas iterar sobre todos los elementos devueltos por document.getElementsByTagName

var links = document.getElementsByTagName('a'); 
var i = links.length; 
while (i--) { 
    links[i].onclick = clickHandler; 
} 
// ... rest of your code ... 
+0

su condición es incorrecta. debería ser 'i> 0'. también puede combinar su decremento y condición para obtener 'while (i--)'. – lincolnk

+0

¿Qué pasa con 'while (i--) {enlaces [i] .onclick = clickHandler; } '? – palswim

+0

@lincolnk @palswim - buenos puntos ... actualizado para ser un poco más sensato (y trabajar ... ya sabes, mientras estamos arreglando cosas) :-) ¡Gracias! –

3
function initAll() 
{ 
    var elements = document.getElementsByTagName('a'); // returns an array 

    // add the handler to each element 
    var n; 
    for (n = 0; n < elements.length; ++n) 
     elements[n].onclick = clickHandler; 
} 
+3

Reemplace con 'int' con' var', que no es válido Javascript. –

+3

int n; : O: O. No hay int en JavaScript. – Rajat

+3

Además, es posible que desee calcular esa propiedad de longitud una vez. En este caso, podría causar problemas graves, ya que getElementsByTagName devuelve una lista activa de elementos. – Rajat

1

Eso es porque getElementsByTagName devuelve un NodeList. No puede asignar un controlador de eventos a través de la propiedad onclick en un NodeList, solo un solo DOMElement.

Probar:

var elems = document.getElementsByTagName('a'); 
for (var i = 0; i < elems.length; i++) { 
    elems[i].onclick = clickHandler; 
} 
0

te sugiero encarecidamente el uso de jQuery. Algo como esto debe hacer el truco:

$(function(){$('a').click(clickHandler);}); 
+2

Si bien jQuery * does * facilita el trabajo con el DOM, incluidos 24 KB de código (minificado y gzip) en la página cuando 125 ** caracteres ** el truco es bastante exagerado. ;-) –

+1

http://lifeinafolder.posterous.com/jquery-nuff-said – Rajat

+0

@Sean: 125 caracteres Unicode tomarán 4 KB de código. Incluir todo ese código en línea en su documento (que probablemente sea lo que está haciendo) agrega hasta 24 KB rápidamente en una serie de solicitudes de página. Si utiliza la copia alojada de Google, puede aprovechar sus servidores rápidos y distribuidos para servir JQuery rápidamente, con una alta probabilidad de que el usuario ya lo tenga en caché. También significa que puede usar JQuery en cualquier otro lugar de su aplicación para crear código conciso y compatible con varios navegadores.A menos que este sea el único lugar en el que va a usar javascript, diría que es obvio. – StriplingWarrior

7

document.getElementsByTagName ('a') devuelve un NodeList de DOM Elementos. Así que para empezar, tendrá que iterar sobre ellos y adjuntar un controlador para cada uno así:

var links = document.getElementsByTagName('a'); 
for(var i=0,il = links.length; i< il; i ++){ 
links[i].onclick = clickHandler; 
} 

Si hay muchos elementos, le sugiero que lea sobre event delegation y asignar un solo controlador para todo.

+5

+1 por sugerir delegaciones de eventos! –

+0

Olvidó un punto y coma después de la condición. –

+0

@Daniel Gracias. Corregido! – Rajat

Cuestiones relacionadas