Tengo una gran aplicación jQuery, y estoy usando los dos métodos siguientes para eventos de clic.
Primer metodo
HTML
<div id="myDiv">Some Content</div>
jQuery
$('#myDiv').click(function(){
//Some code
});
Segundo método
HTML
<div id="myDiv" onClick="divFunction()">Some Content</div>
Llamada a la función de JavaScript
function divFunction(){
//Some code
}
Utilizo el primer o segundo método en mi aplicación. ¿Cuál es mejor? ¿Mejor para el rendimiento? Y estándar?
javascript
jquery
html
jquery-events
Techie
fuente
fuente
Respuestas:
Utilizando
$('#myDiv').click(function(){
es mejor ya que sigue el modelo estándar de registro de eventos. (jQuery usa internamenteaddEventListener
yattachEvent
).Básicamente, registrar un evento de manera moderna es la forma discreta de manejar eventos. También para registrar más de un oyente de eventos para el objetivo puede llamar
addEventListener()
al mismo objetivo.http://jsfiddle.net/aj55x/1/
Más información sobre el registro de eventos modernos -> http://www.quirksmode.org/js/events_advanced.html
Otros métodos, como establecer los atributos HTML , por ejemplo:
O propiedades del elemento DOM , ejemplo:
son viejos y se pueden sobrescribir fácilmente.
Atributo HTMLSe debe evitar el , ya que hace que el marcado sea más grande y menos legible. Las preocupaciones sobre el contenido / estructura y el comportamiento no están bien separadas, lo que hace que sea más difícil encontrar un error.
El problema con las propiedades del elemento DOM método de es que solo un controlador de eventos puede vincularse a un elemento por evento.
Más sobre el manejo tradicional de eventos -> http://www.quirksmode.org/js/events_tradmod.html
Referencia de MDN: https://developer.mozilla.org/en-US/docs/DOM/event
fuente
$('#myDiv').click(function(){
código primero, luego genera 20 filas de HTML dinámicamente a partir de JavaScript y cada fila tiene un botón que, cuando se hace clic, se requiere JavaScript para ejecutar esa misma función. Si lo hace primero, no funcionará ya que el controlador de eventos se ha agregado antes de que se haya generado el HTML. Parece más fácil simplemente agregar elonclick="functionName()"
HTML generado dinámicamente y luego el botón funciona de inmediato. ¿O conoces una solución más elegante para esta situación?.delegate()
función. Adjuntará el evento a cualquier elemento que aparecerá en el futuro en el sitio..live
está en desuso. Úselo.delegate
para versiones anteriores o.on
para versiones más nuevas de jQuery.Para un mejor rendimiento, use el JavaScript nativo. Para un desarrollo más rápido, use jQuery. Verifique la comparación de rendimiento en jQuery vs Native Element Performance .
He realizado una prueba en Firefox 16.0 de 32 bits en Windows Server 2008 R2 / 7 de 64 bits
Para los eventos de clic, verifique los eventos del Navegador nativo frente al desencadenador jquery o jQuery frente al Enlace de eventos de clic nativo .
Pruebas en Chrome 22.0.1229.79 de 32 bits en Windows Server 2008 R2 / 7 de 64 bits
fuente
Por lo que entiendo, su pregunta no es realmente acerca de si usar jQuery o no. Es más bien: ¿es mejor vincular eventos en línea en HTML o mediante oyentes de eventos?
El enlace en línea está en desuso. Además, de esta manera solo puede vincular una función a un evento determinado.
Por lo tanto, recomiendo usar oyentes de eventos. De esta manera, podrá vincular muchas funciones a un solo evento y desvincularlas más adelante si es necesario. Considere este código JavaScript puro:
Esto funciona en la mayoría de los navegadores modernos.
Sin embargo, si ya incluye jQuery en su proyecto, simplemente use jQuery:
.on
o.click
function.fuente
handler1
arroja un error,handler2
yhandler3
nunca será llamado. Además, no puede agregar y eliminar dinámicamente ciertas funciones del oyente. Y por último pero no menos importante,handler1
,handler2
yhandler3
tienen que ser declarada en el ámbito global, que es un olor.try..catch
dentro de las funciones no funcionará cuando estéhandler2
indefinido. Para su información, JavaScript en línea obviamente no funciona cuando JS está deshabilitado en el navegador del usuario, por favor no desinformar a los demás.Puede combinarlos, use jQuery para vincular la función al clic
fuente
$('#myDiv').click
es mejor, porque separa el código JavaScript del HTML . Uno debe tratar de mantener el comportamiento y la estructura de la página diferentes . Esto ayuda mucho.fuente
Vaya por esto, ya que le dará tanto estándar como rendimiento.
Como el segundo método es un código JavaScript simple y es más rápido que jQuery. Pero aquí el rendimiento será aproximadamente el mismo.
fuente
En mi humilde opinión, onclick es el método preferido sobre .click solo cuando se cumplen las siguientes condiciones:
Formulé esta opinión debido al hecho de que los motores de JavaScript en dispositivos móviles son de 4 a 7 veces más lentos que sus homólogos de escritorio que se hicieron en la misma generación. Odio cuando visito un sitio en mi dispositivo móvil y recibo un desplazamiento nervioso porque jQuery vincula todos los eventos a expensas de mi experiencia de usuario y duración de la batería. Otro factor de apoyo reciente, aunque esto solo debería ser una preocupación con las agencias gubernamentales;), tuvimos una ventana emergente de IE7 con un cuadro de mensaje que indica que el proceso de JavaScript está tardando mucho ... esperar o cancelar el proceso. Esto sucedió cada vez que había muchos elementos a los que unirse mediante jQuery.
fuente
Diferencia en obras. Si usa click (), puede agregar varias funciones, pero si usa un atributo, solo se ejecutará una función, la última.
MANIFESTACIÓN
HTML
JavaScript
Si hablamos de rendimiento, en cualquier caso, el uso directo siempre es más rápido, pero el uso de un atributo solo podrá asignar una función.
fuente
La separación de las preocupaciones es clave aquí, por lo que el enlace de eventos es el método generalmente aceptado. Esto es básicamente lo que han dicho muchas de las respuestas existentes.
Sin embargo , no descarte la idea del marcado declarativo demasiado rápido. Tiene su lugar, y con marcos como Angularjs, es la pieza central.
Debe entenderse que el conjunto
<div id="myDiv" onClick="divFunction()">Some Content</div>
se avergonzó tanto porque algunos desarrolladores lo maltrataron. Entonces llegó al punto de proporciones sacrílegas, muy parecidotables
. Algunos desarrolladores realmente evitantables
los datos tabulares. Es el ejemplo perfecto de personas que actúan sin comprender.Aunque me gusta la idea de mantener mi comportamiento separado de mis puntos de vista. No veo ningún problema con el marcado que declara lo que hace (no cómo lo hace, ese es el comportamiento). Puede tener la forma de un atributo onClick real, o un atributo personalizado, al igual que los componentes de bootstraps javascript.
De esta manera, al mirar solo el marcado, puede ver lo que hace, en lugar de intentar revertir las carpetas de eventos de JavaScript de búsqueda.
Entonces, como una tercera alternativa a lo anterior, usar atributos de datos para anunciar declarativamente el comportamiento dentro del marcado. El comportamiento se mantiene fuera de la vista, pero de un vistazo puedes ver lo que está sucediendo.
Ejemplo de Bootstrap:
Fuente: http://getbootstrap.com/javascript/#popovers
Nota La principal desventaja con el segundo ejemplo es la contaminación del espacio de nombres global. Esto puede evitarse utilizando la tercera alternativa anterior o marcos como Angular y sus atributos ng-click con alcance automático.
fuente
Ninguno de los dos es mejor porque pueden usarse para diferentes propósitos.
onClick
(debería serloonclick
) funciona muy ligeramente mejor, pero dudo mucho que note una diferencia allí.Vale la pena señalar que hacen cosas diferentes:
.click
se pueden vincular a cualquier colección jQuery, mientras queonclick
se deben usar en línea en los elementos a los que desea que se vinculen. También puede vincular solo un evento para usaronclick
, mientras que.click
permite continuar vinculando eventos.En mi opinión, sería coherente al respecto y solo lo usaría en
.click
todas partes y mantendría todo mi código JavaScript junto y separado del HTML.No utilice
onclick
. No hay ninguna razón para usarlo a menos que sepa lo que está haciendo y probablemente no.fuente
.click
no era mejor queonclick
("Ninguno de los dos es mejor ") se daba a entender queonclick
es una forma casi o tan buena de escribir código, cuando en realidad.click
es la mejor práctica por una milla. Lo siento, pero en mi humilde opinión, debería reformular su respuestaLos eventos onclick, onmouseover, onmouseout, etc. son realmente malos para el rendimiento (principalmente en Internet Explorer , imagínense). Si codifica con Visual Studio , cuando ejecuta una página con estos, cada uno de estos creará un bloque SCRIPT separado que ocupará memoria y, por lo tanto, ralentizará el rendimiento.
Sin mencionar que debe tener una separación de preocupaciones : ¡JavaScript y los diseños deben estar separados!
¡Siempre es mejor crear evenHandlers para cualquiera de estos eventos, un evento puede capturar cientos / miles de elementos, en lugar de crear miles de bloques de guiones separados para cada uno!
(Además, todo lo que todos los demás dicen).
fuente
Bueno, una de las ideas principales detrás de jQuery es separar JavaScript del desagradable código HTML . El primer método es el camino a seguir.
fuente
La mayoría de las veces, los métodos JavaScript nativos son una mejor opción sobre jQuery cuando el rendimiento es el único criterio, pero jQuery utiliza JavaScript y facilita el desarrollo. Puede usar jQuery ya que no degrada demasiado el rendimiento. En su caso específico, la diferencia de rendimiento es ignorable.
fuente
El primer método de usar
onclick
no es jQuery, sino simplemente Javascript, para que no obtenga la sobrecarga de jQuery. La forma jQuery se puede expandir a través de selectores si necesita agregarlo a otros elementos sin agregar el controlador de eventos a cada elemento, pero como lo tiene ahora, es solo una pregunta si necesita usar jQuery o no.Personalmente, ya que está utilizando jQuery, me quedaría con él, ya que es coherente y desacopla el marcado del script.
fuente
document.querySelector('#something').addEventListener(...
o similar en Javascript simple, por lo que ese no es el punto. Del mismo modo, puede detectar eventos burbujeantes de nodos secundarios en Javascript, no solo con los accesos directos de jQuery. El meollo de la cuestión es los acontecimientos deben ser en el controlador (archivo de definiciones de comportamiento javascript) en lugar de la vista (hay esparcidos aquí y en el html, requiriendo variable global de funciones o, peor aún, el código en línea.)El primer método es preferir. Utiliza los modelos de registro de eventos avanzados , lo que significa que puede adjuntar múltiples controladores al mismo elemento. Puede acceder fácilmente al objeto de evento, y el controlador puede vivir en el alcance de cualquier función. Además, es dinámico, es decir, se puede invocar en cualquier momento y es especialmente adecuado para elementos generados dinámicamente. Ya sea que use jQuery, otra biblioteca o los métodos nativos directamente no importan realmente.
El segundo método, que utiliza atributos en línea, necesita muchas funciones globales (lo que conduce a la contaminación del espacio de nombres) y mezcla el contenido / estructura (HTML) con el comportamiento (JavaScript). No uses eso.
Su pregunta sobre el rendimiento o los estándares no se puede responder fácilmente. Los dos métodos son completamente diferentes y hacen cosas diferentes. El primero es más poderoso, mientras que el segundo es despreciado (considerado mal estilo).
fuente
Onclick Function Jquery
$('#selector').click(function(){ //Your Functionality });
fuente