2009-09-25 24 views

Respuesta

21

Esto se hace generalmente con Event#findElement:

document.observe('click', function(e, el) { 
    if (el = e.findElement('.foo')) { 
    // there's your `el` 
    // might want to stop event at this point - e.stop() 
    } 
}); 
+0

Más excelente. ¡Gracias! La documentación que encontré mencionó que solo se permitía un tagName, no un selector de CSS. Sin embargo, al mirar la fuente de Prototype se confirma que efectivamente se permite un selector de CSS. – mynameistechno

+0

Bueno, esto no es exactamente equivalente a jQuery. Esto se une al clic del documento y encuentra el evento, mientras que creo que jQuery se activa en los cambios de DOM y vincula los eventos a los nuevos elementos. Es posible que jQuery ** estuviese ** haciendo algo como esto bajo las sábanas, pero a partir de jQuery 1.4, admite eventos como hover, así que me imagino que * no * está haciendo algo como esto debajo de las cobijas incluso si alguna vez lo hizo hizo. – cgp

+0

@altCognito, no, esto es más o menos cómo jQuery funciona bajo el capó para live-binding desde que se introdujo 'live '. jQuery puede obligar a los manejadores a 'document' para eventos que no se propaguen de forma nativa porque jQuery creará y propagará dichos eventos manualmente. – jangosteve

13

La respuesta correcta a la pregunta está aquí: http://gurde.com/2011/08/jquery-live-in-prototype/

El equivalente de la jQuery .live() en Prototype es el método Event.on():

var handler = document.on(
    'click', 
    'div[id^="post-"] .attached-post-thumbnail', 
    function(event, element) { 
     console.log(this); 
     console.log(element); 
    }.bind(this) 
); 

handler.stop(); 
handler.start(); 

Dentro de la devolución de llamada, la palabra clave this se referirá siempre al elemento original (en este caso documento) .

+0

El lugar correcto para preguntar/quejarse es meta. Probablemente eliminado porque era una respuesta de solo un enlace, pero no hay ninguna razón visible. –

+1

ver mi edición y http://stackoverflow.com/questions/how-to-answer –

+0

Creo que el ejemplo vinculado es incorrecto. No hay 'document.on (...)', sino que debería usar 'Event.on (document, ...)' de la misma manera. – clockworkgeek