2010-09-13 16 views
8

Próbowałem to zrobić, ale nie wydaje się działać:Jak dodać zdarzenie onclick do znaczników html bez identyfikatora użytkownika przy użyciu 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; 
       } 

     } 

    } 

wiem, że mogę getElementById i że działa, ale nie robi to działa w ten sposób. Każda pomoc będzie doceniona.

Dzięki!

+2

Czy "document.getElementsByTagName" zwraca tablicę? Być może trzeba przechodzić przez tę zwróconą tablicę i przypisać procedurę obsługi? – danjah

+1

JQuery został zaprojektowany specjalnie do tego rodzaju pracy. Czy możesz używać Jquery? – StriplingWarrior

+0

Rozważałem jquery, aby wstawić obsługę onclick, jeśli nie było prostszej poprawki, tak. – Graham

Odpowiedz

1

trzeba iteracyjne nad wszystkich elementów zwróconych przez document.getElementsByTagName

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

Twój stan jest zły. powinno być "i> 0". możesz także połączyć swój dekrement i warunek, aby uzyskać 'while (i--)'. – lincolnk

+0

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

+0

@lincolnk @palswim - dobre punkty ... zaktualizowane, aby być nieco bardziej rozsądne (i pracować ... wiesz, podczas gdy naprawiamy rzeczy) :-) Dzięki! –

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

Zamień na 'int' z' var', który nie jest prawidłowy JavaScript. –

+3

int n; : O: O. W języku JavaScript nie ma int. – Rajat

+3

Możesz także raz obliczać tę właściwość length. Może to spowodować poważne problemy w tym przypadku, ponieważ getElementsByTagName zwraca listę elementów na żywo. – Rajat

1

to dlatego getElementsByTagName zwraca NodeList. Nie można przypisać funkcji obsługi zdarzenia za pomocą właściwości onclick na urządzeniu NodeList, a tylko pojedynczym DOMElement.

Spróbuj:

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

bym zdecydowanie wskazują przy użyciu JQuery. Coś jak to powinno załatwić sprawę:

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

Podczas gdy jQuery * nie * ułatwia pracę z DOM, w tym 24KB kodu (minifikowanego i gzipowanego) na stronie, gdy 125 ** znaków ** to sztuczka jest raczej przesada. ;-) –

+1

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

+0

@Sean: 125 znaków Unicode zajmie 4 KB kodu. Uwzględniając cały kod umieszczony na twoim dokumencie (co prawdopodobnie robi), suma 24KB rośnie szybko w stosunku do liczby żądań strony. Jeśli korzystasz z kopii hostowanej przez Google, możesz wykorzystać szybko działające, rozproszone serwery, aby szybko obsługiwać JQuery, z dużym prawdopodobieństwem, że użytkownik i tak będzie już w pamięci podręcznej. Oznacza to również, że możesz używać JQuery w innym miejscu aplikacji do tworzenia zwięzłych kodów kompatybilnych z różnymi przeglądarkami.O ile nie jest to jedyne miejsce, w którym będzie używał javascript, powiedziałbym, że to nie myślenia. – StriplingWarrior

7

document.getElementsByTagName ('A') zwraca NodeList DOM Elements. Więc na początek, trzeba będzie iteracyjne nad nimi i dołączyć do obsługi każdego tak:

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

Jeśli istnieje wiele elementów, proponuję przeczytać o event delegation i przypisać tylko jeden program obsługi do wszystkiego.

+5

+1 za sugerowanie delegacji wydarzenia! –

+0

Po warunku zapomniałeś średnika. –

+0

@Daniel Dzięki. Poprawione! – Rajat

Powiązane problemy