2011-09-26 12 views
32

Así que tal vez simplemente no estoy buscando en los lugares correctos, pero no puedo encontrar una buena explicación de cómo hacer el equivalente de jQueryversión de JavaScript básico de jQuery .pulsa

$('a').click(function(){ 
    // code here 
}); 

en el viejo y simple JavaScript ?

Básicamente quiero ejecutar una función cada vez que se hace clic en una etiqueta a, pero no tengo la capacidad de cargar jQuery en la página para hacerlo de la manera anterior, así que necesito saber cómo hacerlo con normalidad JavaScript.

Respuesta

39

Ejemplo de trabajo: http://jsfiddle.net/6ZNws/

HTML

<a href="something">CLick Here</a> 
<a href="something">CLick Here</a> 
<a href="something">CLick Here</a> 

Javascript:

var anchors = document.getElementsByTagName('a'); 
for(var z = 0; z < anchors.length; z++) { 
    var elem = anchors[z]; 
    elem.onclick = function() { 
     alert("hello"); 
     return false; 
    }; 
} 
+1

+1 Le aconsejaría que termine la función * expresiones * con un ';' embargo. – pimvdb

+0

Whoops buena captura. –

+0

No estoy de acuerdo. En mi humilde opinión, puede destruir la función límite anterior. Para usar "addEventListener" es mucho mejor, creo. –

5

Aquí van:

[].forEach.call(document.querySelectorAll('a'), function (a) { 
    a.addEventListener('click', function() { 
     // code here 
    }, false); 
}); 

Demostración en directo:http://jsfiddle.net/8Lvzc/3/

(no funciona en IE8)

Además, recomiendo delegación de eventos ...

+2

¿Tiene alguna razón para no usar '[] .forEach.call (...)'? – pimvdb

+0

@pimvdb Bueno, 'call' no es adecuado ya que una función debe pasarse a' forEach'. Uno debería usar 'apply', entonces:' [] .forEach.apply (..., [function() {}]); '. La notación '[function() {}]' es un poco extraña para mi gusto ... –

+3

Me refiero a http://jsfiddle.net/8Lvzc/1/. – pimvdb

30
element.addEventListener('click', function() { ... }, false); 

Tienes que ubicar los elementos Haga un bucle para conectar cada uno.

6
document.getElementById('elementID').onclick = function(){ 
     //click me function! 
} 
+0

Ah ... debería haber indicado que no sabré las etiquetas 'a' o ID por adelantado, así que solo tengo que decir "Por CUALQUIER etiqueta presionada ....." –

1

Esto asignará una función a cada elemento onclicka.

var links = document.getElementsByTagName("a"); 
var linkClick = function() { 
    //code here 
}; 

for(var i = 0; i < links.length; i++){ 
    links[i].onclick = linkClick; 
} 

Puede verlo en acción here.

11

intente lo siguiente

var clickHandler = function() { 
    // Your click handler 
}; 

var anchors = document.getElementsByTagName("a"); 
for (var i = 0; i < anchors.length; i++) { 
    var current = anchors[i]; 
    current.addEventListener('click', clickHandler, false); 
} 

Nota: Como Ӫ _._ Ӫ señaló que esto no funcionará en Internet Explorer 8 e inferior, ya que no soporta addEventListener.

En IE8 puede suscribirse para suscribirse a onclick. No es un sustituto perfecto, ya que requiere a todos a cooperar pero puede ser capaz de ayudarle a cabo

var subscribeToOnClick = function(element) { 
    if (element.onclick === undefined) { 
    element.onclick = clickHandler; 
    } else { 
    var saved = element.onclick; 
    element.onclick = function() { 
     saved.apply(this, arguments); 
     clickHandler.apply(this, arguments); 
    } 
    } 
} 

for (var i = 0; i < anchors.length; i++) { 
    var current = anchors[i]; 
    subscribeToOnClick(current); 
} 
+2

No cree funciones dentro de un bucle. Es mejor crear la función fuera del ciclo y hacer referencia a la función dentro del ciclo. –

+0

@PeterOlson principalmente estaba tratando de replicar el estilo de la pregunta original.Lo actualizaré para que sea más correcto en este sentido – JaredPar

+0

Debería tenerse en cuenta que IE8 e inferior no son compatibles con 'addEventListener'. – user113716