2010-02-05 14 views
24

stavo giocando intorno con JavaScript in Firefox, e ha colpito un problema che è illustrato nel seguente esempio:Che cosa è 'click()' in JavaScript

<HEAD> 
<script type="text/javascript"> 
function click() 
{ 
    alert("click"); 
} 

</script> 
</HEAD> 

<BODY> 

<input type="radio" onclick="click()"> 
</BODY> 

Quando clicco sul pulsante di scelta, non succede nulla e senza errori (in Firebug)

Se cambio il nome della funzione in do_click, e cambio onclick, ricevo l'avviso.

Quindi la domanda è: cosa sta succedendo? clic non sembra essere una parola riservata o un simbolo esistente

risposta

35

codice all'interno di gestori di eventi in linea è l'ambito all'elemento, come se fosse in un with blocco.

Pertanto, all'interno del gestore onclick, il nome click viene risolto nel metodo click dell'elemento.

Questo può essere demonstrated scrivendo alert(nodeName) nel gestore

+0

Holy s *, I * never * lo sapeva. Anche si comporta lo stesso in IE. Sembra così pericoloso ora ... –

+1

Neanche io, finché non ho letto la domanda. – SLaks

+4

Ci sono così tante proprietà che pendono da un nodo DOM. Se un gestore di clic stava semplicemente tentando di impostare una variabile globale che si chiamava uguale a una delle proprietà dei nodi (ad esempio 'innerHTML'), beh .... * crap *. –

0

Penso che il clic() sia un nome di procedura riservata, quindi non è possibile sovrascriverlo. Spiega perché cambiare il nome e nient'altro lo fa funzionare.

+0

"non può sovrascrivere" non è corretto. solo che l'obiettivo è diverso. – bryantsai

0

Penso che il metodo click() in javascript simuli facendo clic sul pulsante. Quindi, questo deve essere una sorta di loop infinito ...

A cura di aggiungere: Partenza MSDN per la documentazione del metodo click

7

elementi DOM hanno un metodo nativo click().

Di seguito vi mostrerà che scatto è un metodo nativo:

<input type="radio" onclick="alert(click.toString())"> 

È possibile registrare le funzione di clic come il gestore di eventi come segue. All'interno del gestore, this farà riferimento all'elemento HTML.

<input type="radio" id="foo" > 

function click() 
{ 
    alert("click"); 
} 
document.getElementById('foo').onclick = click; 

V'è un eccellente serie di articoli su eventi del browser a http://www.quirksmode.org/js/introevents.html

0

'click' di per sé non è un javascript reserved keyword di fuori del contesto del gestore di eventi in linea come ha risposto Slaks.

Vale a dire che il metodo "clic" definito nella domanda è valido. Il collegamento del gestore eventi "esternamente" funzionerà. Per esempio. utilizzando jQuery:

$('input').click(click);