2011-08-03 17 views
6

Sé que puedo estar preguntando por la luna aquí, pero estoy buscando algunas opiniones con experiencia sobre la mejor forma de agregar oyentes de eventos o más bien 'Cuando' o 'Dónde' para agregarlos en el archivo js.práctica recomendada para agregar oyentes de eventos (javascript, html)

Tome mi ejemplo. Tengo una página que tiene un montón de eventos onclick que ahora tienen que ser manejado por las propiedades en el archivo JS

por ejemplo

var test = document.getElementById("i-am-element"); 
test.onclick = testEventListener; 

Mi pregunta es dónde exactamente debo añadir esto en el archivo JS.

Como yo estaba planeando ir sobre él era tener algo como lo siguiente

$(document).ready(function() { 
    var test = document.getElementById("test-me-shane"); 
    test.onclick = testEventListener; 

    //add all the functions to different elements 
}); 

myfunction1(){} 
myfunction2(){} 
myfunction3(){} 

Así que una vez que el documento está listo, sólo entonces son todos los detectores de eventos añaden. ¿Es esto aceptable o hay una forma más universalmente aceptada de hacerlo?

NOTA: Sé que esta pregunta puede parecer subjetiva, por lo que voy con la respuesta correcta será la forma más popular en la que ha visto a los oyentes de eventos vistos agregados. Estoy seguro de que debe haber una aceptación mayoritaria sobre esto y me disculpo por adelantado si es similar a algo en lo que debes declarar las variables, al principio o cuando las necesites.

In Java, should variables be declared at the top of a function, or as they're needed?

+0

No estoy seguro si obtendrá la luna, pero estudiar sobre delegación de eventos. – Kumar

+0

Bueno, si la pregunta no puede ser respondida en cuanto a si hay una manera correcta de hacerlo, ¿tal vez alguien podría decirme si mi camino está equivocado? – OVERTONE

+0

Escribí una publicación de blog sobre la delegación de eventos, esta es mi forma de enseñarme que puede ser útil para usted, aquí está http://www.kumarchetan.com/blog/2010/10/03/event-delegation-save- thou-webpage /, – Kumar

Respuesta

7

Realmente desea poder agregar todos los oyentes de su evento en el mismo lugar; ¿por qué? Simplemente por la facilidad de mantenimiento.

Debido a esto, el mejor lugar para poner a todos sus oyentes de eventos es en un lugar donde puede garantizar todos los elementos que posiblemente quiera vincular a los controladores de eventos están disponibles.

Esta es la razón por el lugar más común para unir sus controladores de eventos es después del evento DOMReady ha disparado $(document).ready().

Como siempre, hay son algunas excepciones a la regla. Muy ocasionalmente, es posible que desee vincular un controlador de eventos a un elemento tan pronto como como está disponible; que es después de que se haya definido la etiqueta de cierre del elemento. En este caso, el fragmento de seguimiento se debe utilizar:

<div id="arbitrary-parent"> 
    <h1 id="arbitrary-element">I need an event handler bound to me <strong>immediately!</strong></h1> 
    <script>document.getElementById("arbitrary-element").onclick = function() { alert("clicked"); }</script> 
</div> 

La otra cosa que usted debe tener en cuenta es cómo se va a obligar a sus manipuladores. Si se atiene a: DOMElement.onclick = function() { };, se está limitando a vincular el controlador por evento.

En cambio, el enfoque de seguimiento le permite enlazar Muliple manipuladores por evento:

function bind(el, evt, func) { 
    if (el.addEventListener){ 
     el.addEventListener(evt, func, false); 
    } else if (el.attachEvent) { 
     el.attachEvent('on' + evt, func); 
    } 
} 
+0

Tal vez debería ver lo que es un controlador antes de aceptar esto como la respuesta correcta. De lo contrario, esto es perfecto. – OVERTONE

+0

Ah, no importa. Sabía lo que eran los controladores. Simplemente no sabía cómo se llamaban: 3 – OVERTONE

1

¿Hay alguna razón específica por la cual usted no sólo tiene que especificar la asociación cuando se declara el elemento en el html
<someTag id="i-am-an-element" onclick="functionToTheEventToExecute()"> </someTag>
supongo que sí.

+6

¡No vincularás los eventos de esta manera! – Kumar

+11

"** Discreto Javascript **"? – Matt

+1

aparentemente Cuenta como javascript incrustado y estoy aprendiendo esto hoy. Es un requisito que todos los eventos se manejen como propiedades en el archivo JS y no en el HTML. Aparte de eso, no tengo ningún problema con el onclick. – OVERTONE

Cuestiones relacionadas