2010-09-13 11 views
8

Ho provato a fare questo, ma non sembra funzionare:Come aggiungo un evento onclick ai tag html senza id utilizzando 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; 
       } 

     } 

    } 

so che posso getElementById e che funziona, ma non lavorare in questo modo. Qualsiasi aiuto sarebbe apprezzato.

Grazie!

+2

"document.getElementsByTagName" restituisce un array? Potrebbe essere necessario eseguire il ciclo attraverso la matrice restituita e assegnare il gestore? – danjah

+1

JQuery è stato progettato specificamente per questo tipo di lavoro. Puoi usare Jquery? – StriplingWarrior

+0

Stavo considerando jquery per inserire il gestore onclick se non ci fosse una soluzione più semplice, sì. – Graham

risposta

1

È necessario iterare su tutti gli elementi restituiti dalla document.getElementsByTagName

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

la tua condizione è sbagliata. dovrebbe essere 'i> 0'. inoltre puoi combinare il decremento e le condizioni per ottenere 'while (i--)'. – lincolnk

+0

E riguardo 'while (i--) {links [i] .onclick = clickHandler; } '? – palswim

+0

@lincolnk @palswim - buoni punti ... aggiornato per essere leggermente più sensibile (e funziona ... sai, mentre stiamo sistemando le cose) :-) Grazie! –

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

Sostituisci con 'int' con' var', che non è Javascript valido. –

+3

int n; : O: O. Non c'è int in JavaScript. – Rajat

+3

Inoltre, potresti voler calcolare la proprietà length una volta. In questo caso, potrebbe causare seri problemi poiché getElementsByTagName restituisce un elenco di elementi dal vivo. – Rajat

1

Questo perché getElementsByTagName restituisce un NodeList. Non è possibile assegnare un gestore di eventi tramite la proprietà onclick su un NodeList, solo un singolo DOMElement.

Prova:

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

avrei suggeriscono fortemente utilizzando jQuery. Qualcosa del genere dovrebbe fare il trucco:

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

Mentre jQuery * * facilita il lavoro con il DOM, inclusi 24KB di codice (minified e gzip) sulla pagina quando 125 ** caratteri ** fanno il trucco è piuttosto eccessivo. ;-) –

+1

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

+0

@Sean: 125 caratteri unicode occupano 4 KB di codice. Includere tutto il codice in linea sul tuo documento (che è probabilmente quello che sta facendo) aggiunge fino a 24KB velocemente su un numero di richieste di pagina. Se si utilizza la copia ospitata da Google, è possibile sfruttare i propri server veloci e distribuiti per servire rapidamente JQuery, con la possibilità che l'utente lo abbia già memorizzato nella cache. Significa anche che puoi usare JQuery in qualsiasi altro punto della tua applicazione per creare un codice conciso e compatibile con i browser.A meno che non sia l'unico posto in cui userà javascript, direi che è un gioco da ragazzi. – StriplingWarrior

7

document.getElementsByTagName ('a') restituisce un NodeList di DOM Elements. Così, per cominciare, si dovrà scorrere su di loro e allegare un gestore per ciascun come questo:

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

Se ci sono molti elementi, vi consiglio di leggere su event delegation e di assegnare un solo gestore per tutto.

+5

+1 per suggerire la delega dell'evento! –

+0

Hai dimenticato un punto e virgola dopo la condizione. –

+0

@Daniel Grazie. Corretto! – Rajat

Problemi correlati