Errores de jQuery para evitar [cerrado]

210

Estoy comenzando un proyecto con jQuery.

¿Qué trampas / errores / conceptos erróneos / abusos / usos incorrectos tuvo en su proyecto jQuery?

flybywire
fuente
44
Esto no debería haberse cerrado por ser "no constructivo". Se han materializado algunas respuestas muy útiles y la pregunta se ha destacado 220 veces ahora. Vota para reabrir, si tienes suficiente karma.
Roy Prins
Me parece que jQuery es una trampa en sí mismo
gromit190

Respuestas:

189

No estar al tanto del golpe de rendimiento y usar en exceso los selectores en lugar de asignarlos a variables locales. Por ejemplo:-

$('#button').click(function() {
    $('#label').method();
    $('#label').method2();
    $('#label').css('background-color', 'red');
});

Más bien que:-

$('#button').click(function() {
    var $label = $('#label');
    $label.method();
    $label.method2();
    $label.css('background-color', 'red');
});

O incluso mejor con el encadenamiento : -

$('#button').click(function() {
    $("#label").method().method2().css("background-color", "red"); 
});

Encontré este el momento esclarecedor cuando me di cuenta de cómo funcionan las pilas de llamadas.

Editar: sugerencias incorporadas en los comentarios.

Gavin Gilmour
fuente
16
+1 para el enlace de youtube. Santa mierda, aprendí mucho.
Jason
23
Creo que asignar cosas a las variables locales es excelente, pero no se olvide del poder de encadenar (de su ejemplo): $ ("# label"). Method (). Method2 (). Css ("background-color", " rojo");
Lance McNearney el
El video de YouTube fue genial. ¡He visto otras presentaciones de Google sobre el tema y todavía aprendí algunas cosas! ¡Gracias!
Gabriel Hurley
+1 para el enlace también, ¡excelente!
Josh Stodola
77
Es una especie de convención usar un signo de dólar para variables con contexto jQuery. Así que quizás quieras escribirvar $label = $('#label');
Tim Büthe
90

Comprende cómo usar el contexto. Normalmente, un selector jQuery buscará todo el documento:

// This will search whole doc for elements with class myClass
$('.myClass');

Pero puede acelerar las cosas buscando dentro de un contexto:

var ct = $('#myContainer');
// This will search for elements with class myClass within the myContainer child elements
$('.myClass', ct);
slolife
fuente
9
Aaaaaaah! Bueno, eso es aproximadamente 1,000,000 de mis errores corregidos. +1
jammus
44
Parece que su último punto es incorrecto - groups.google.co.uk/group/jquery-dev/browse_thread/thread/…
James
1
Gracias por señalar esto JP. Ahora, qué hacer ... ¿Debo eliminar mi respuesta para que nadie más se vuelva loco y cambie su código por nada?
slolife
No, sigue siendo un buen punto, en cuanto a optimización. :)
James
2
jQuery verifica si el contexto es una instancia de jQuery, por lo que no hay razón para hacerlo [0]. $('.myClass', ct);o si sabe que ct es una instancia de jQuery, puede usar findct.find(".myClass")
gradbot
62

No use selectores de clase básica, como este:

$('.button').click(function() { /* do something */ });

Esto terminará mirando cada elemento para ver si tiene una clase de "botón".

En cambio, puede ayudarlo, como:

$('span.button').click(function() { /* do something */ });
$('#userform .button').click(function() { /* do something */ });

Esto lo aprendí el año pasado del blog de Rebecca Murphy

Actualización : esta respuesta se dio hace más de 2 años y no es correcta para la versión actual de jQuery. Uno de los comentarios incluye una prueba para probar esto. También hay una versión actualizada de la prueba que incluye la versión de jQuery en el momento de esta respuesta.

BrianH
fuente
66
También tenía la impresión de que lo contrario era cierto. Quizás este sea el caso en los navegadores que no implementan getElementsByClassName, pero de lo contrario solo le está dando a jQuery más trabajo para hacer. Me gustaría mucho ver a Rebecca publicar algunos puntos de referencia :)
Alex Barrett
77
Estás REDUCIENDO la cantidad de trabajo que tiene que hacer. Es como decirle a alguien que saque los calcetines del cajón de su tocador en lugar de decirle que saque los calcetines de su habitación. Reduce la cantidad de 'mirar' que tiene que hacer sustancialmente.
Sneakyness
44
Lo contrario es cierto cuando está escribiendo CSS (al menos incluyendo la etiqueta del elemento). Ver code.google.com/speed/page-speed/docs/…
kmiyashiro
77
@Sneakyness No todo tiene un análogo preciso de la vida real. Por ejemplo, $('.b')podría usarse document.getElementsByClassName('b')si el navegador lo admite, pero al hacerlo $('a.b'), obtendrá todos los elementos coincidentes con la clase by luego confirmará que son anclas en una operación de dos etapas. Esto último me parece más trabajo. Para una analogía de la vida real, intente esto: encuentre todos los calcetines en mi habitación. Ahora, tira las que no estén en mi tocador.
alex
2
Creo que la idea errónea sobre los selectores se debe al hecho de que en versiones anteriores de jquery, era más rápido hacer $ ('# foo') en lugar de $ ('div # foo'), ya que, por definición, una identificación es única. Sin embargo, estoy bastante seguro de que esto se solucionó en versiones posteriores, pero esa recomendación se aplicó solo a los identificadores, no a otros tipos de selectores
Alex Heyd el
35

Intente dividir las funciones anónimas para poder reutilizarlas.

//Avoid
$('#div').click( function(){
   //do something
});

//Do do
function divClickFn (){
   //do something    
}

$('#div').click( divClickFn );
cuadrado rojo
fuente
19
Creo que esto se aplica aproximadamente al mismo grado en que el código síncrono (en línea) se debe dividir en funciones con nombre. Si tiene un fragmento de código que está pidiendo que se le dé un nombre, entonces hágalo. Pero no mueva el código fuera de línea simplemente porque lo está envolviendo dentro de una función; Las funciones anónimas existen por una buena razón.
Dan Breslau el
44
En realidad me gusta dar 'nombre' a mi función. Es muy útil cuando está depurando el código y en lugar de ver una lista interminable de funciones anónimas, ve las funciones con nombre correcto.
SolutionYogi el
1
Su punto está bien entendido, y probablemente esto me haya hecho tropezar varias veces. Aun así, " aproximadamente el mismo grado" todavía funciona para mí.
Dan Breslau el
1
especialmente si el enlace está sucediendo en un bucle!
daniellmb
Las funciones con nombre también lo benefician enormemente al depurar; nada apesta más que mirar un callstack de 8 niveles de profundidad que no tiene nada más que (anonymous). Lea más sobre este consejo aquí: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…
ken
34
  • Evite abusar del documento listo.
  • Mantenga el documento listo para inicializar solo el código.
  • Siempre extraiga las funciones fuera del documento listo para que puedan reutilizarse.

He visto cientos de líneas de código dentro de la declaración doc ready. Feo, ilegible e imposible de mantener.

Peter Mortensen
fuente
66
+1. En general, la mayoría del código jQuery que he visto utiliza funciones con cientos de líneas. No sé por qué a los 'desarrolladores de jQuery' no les gusta usar funciones más pequeñas.
SolutionYogi el
66
@SolutionYogi porque la mayoría son solo novatos de JS?
adamJLev
Estoy a favor de no poner funciones muy largas en documentos listos, eso es un buen consejo. Sin embargo, realizar muchas funciones de componentes pequeños que se ejecutan desde una función general que no está lista para documentos no es necesariamente la mejor práctica. Si la función general es la única que usa esos fragmentos de código, es mejor que lo ponga todo en la única función, incluso si es más difícil de leer. Llamar a las funciones tiene muchos gastos generales y si solo usa el código en un contexto, debe evitarlo.
sage88
34

Durante el uso $.ajax función para las solicitudes de Ajax al servidor, debe evitar usar el completeevento para procesar los datos de respuesta. Se disparará si la solicitud fue exitosa o no.

En lugar de completeusar success.

Ver Ajax Events en los documentos.

Patrick McElhaney
fuente
1
He estado yendo y viniendo sobre el éxito frente al completo, ¿puedes ampliar por qué crees que completar es mejor?
Neil N el
1
No estoy diciendo que completo es mejor. Lo que intentaba decir es que debe evitar el uso engañoso de complete y debe tener éxito para poder procesar los datos de respuesta.
Artem Barger el
2
Bueno, siempre se llama. Sin embargo, no estaría de acuerdo. Completar es lo mejor para ocultar un gif de carga, etc. Debería utilizar el éxito para manejar la respuesta y el error de cualquier error, por supuesto.
Redsquare
1
Sugiere utilizar el éxito en lugar de completar. 'complete' siempre se dispara cuando la solicitud de ajax es 'complete', no importa si se completó con éxito o sin éxito.
SolutionYogi el
@redsquare, ¿puedes ampliar eso exactamente con lo que no estás de acuerdo? Me refería al proceso de datos y no me importó que las imágenes ocultasen / mostraran oportunidades que tiene con el controlador completo.
Artem Barger el
24

Eventos de animación "encadenado" con devoluciones de llamada.

Suponga que desea animar un párrafo que desaparece al hacer clic en él. También quería eliminar el elemento del DOM después. Puede pensar que simplemente puede encadenar los métodos:

$("p").click(function(e) {
  $(this).fadeOut("slow").remove();
});

En este ejemplo, se llamará a .remove () antes de que se complete .fadeOut (), destruyendo su efecto de desvanecimiento gradual y simplemente haciendo que el elemento desaparezca instantáneamente. En cambio, cuando desee disparar un comando solo al finalizar el anterior, use la devolución de llamada:

$("p").click(function(e){
  $(this).fadeOut("slow", function(){
    $(this).remove();
  });
});

El segundo parámetro de .fadeOut () es una función anónima que se ejecutará una vez que la animación .fadeOut () se haya completado. Esto produce un desvanecimiento gradual y una posterior eliminación del elemento.

Sampson
fuente
24

Si vincula () el mismo evento varias veces, se activará varias veces. Usualmente siempre voy unbind('click').bind('click')solo para estar seguro

Scott Evernden
fuente
2
Esto no es específico de jQuery, aunque es algo importante a tener en cuenta.
SolutionYogi el
11
Puede usar eventos en vivo para no tener que vincular el mismo evento dos veces.
Powerlord el
live tiene sus propios problemas (de rendimiento) si se usa en exceso. Mejor en 1.3.3 donde puedes dar contexto.
Redsquare
23

No abuses de los complementos.

La mayoría de las veces solo necesitará la biblioteca y tal vez la interfaz de usuario. Si lo mantiene simple, su código será mantenible a largo plazo. No todos los complementos son compatibles y se mantienen, en realidad la mayoría no. Si puede imitar la funcionalidad utilizando elementos centrales, lo recomiendo encarecidamente.

Los complementos son fáciles de insertar en su código, le ahorran algo de tiempo, pero cuando necesite algo extra, es una mala idea modificarlos, ya que pierde las posibles actualizaciones. El tiempo que ahorra al principio se perderá más tarde al cambiar los complementos obsoletos.

Elija los complementos que usa sabiamente. Además de la biblioteca y la interfaz de usuario, uso constantemente $ .cookie , $ .form , $ .validate y thickbox . Por lo demás, principalmente desarrollo mis propios complementos.

Elzo Valugi
fuente
2
¿Qué pasa con la cuadrícula? ¿Haces el tuyo?
jmav
si. de proyecto a proyecto los datos vienen de varias maneras. Prefiero tener el control total de que darme cuenta de que la cuadrícula solo me ayuda a la mitad y luego tengo que improvisar.
Elzo Valugi
IF {dado el tiempo suficiente, generalmente prefiero escribir todo el código de manipulación de datos controlado por dom (css / html) directamente. en otras palabras, no pase datos a un 'complemento' y haga que arroje html. es bastante difícil evaluar (el medio campo de) los complementos para la compatibilidad del alcance actual, olvidarse de las demandas futuras. pensar ... diseñadores, planificadores, gerentes, gerentes, gerentes. ah y clientes y usuarios. pero si tiene todas esas cosas, no tendrá suficiente de dicho "tiempo". así que solo usa jqgrid ya, estás perdiendo el tiempo deliberando. ¿ya está hecho?}
user406905
22

Peligro: usar bucles en lugar de selectores.

Si te encuentras buscando el método jQuery '.each' para iterar sobre elementos DOM, pregúntate si puedes usar un selector para obtener los elementos.

Más información sobre los selectores jQuery:
http://docs.jquery.com/Selectors

Peligro: NO usar una herramienta como Firebug

Firebug fue hecho prácticamente para este tipo de depuración. Si vas a estar jugando en el DOM con Javascript, necesitas una buena herramienta como Firebug para darte visibilidad.

Más información sobre Firebug: http://getfirebug.com/

Otras grandes ideas están en este episodio del podcast polimórfico: (jQuery Secrets with Dave Ward) http://polymorphicpodcast.com/shows/jquery/

Dan Esparza
fuente
1
He hecho el primero muchas veces. Solo necesita recordar que la mayoría de las funciones de jQuery funcionarán en todos los elementos devueltos por un selector.
DisgruntledGoat
No me gusta el método .each para ser sincero
Simon Hayter
14

Malentendido de usar este identificador en el contexto correcto. Por ejemplo:

$( "#first_element").click( function( event)
{
   $(this).method( ); //referring to first_element
   $(".listOfElements").each( function()
   {
      $(this).someMethod( ); // here 'this' is not referring first_element anymore.
   })
});

Y aquí una de las muestras de cómo puedes resolverlo:

$( "#first_element").click( function( event)
{
   $(this).method( ); //referring to first_element
   var $that = this;
   $(".listOfElements").each( function()
   {
      $that.someMethod( ); // here 'that' is referring to first_element still.
   })
});
Artem Barger
fuente
1
+1 Más un problema de JavaScript que un problema de jquery, pero solía tropezar mucho con esto.
mmacaulay
13

Evite buscar en todo el DOM varias veces. Esto es algo que realmente puede retrasar su secuencia de comandos.

Malo:

$(".aclass").this();
$(".aclass").that();
...

Bueno:

$(".aclass").this().that();

Malo:

$("#form .text").this();
$("#form .int").that();
$("#form .choice").method();

Bueno:

$("#form")
    .find(".text").this().end()
    .find(".int").that().end()
    .find(".choice").method();
revs googletorp
fuente
2
$ (". aclass"). this (). that (); ¡no es bueno! los selectores de clase solamente son lentos
redsquare
Es un ejemplo ilustrativo que muestra la capacidad de Jquery para usar varios métodos en una sola selección. Hice la selección simple (y por lo tanto lenta) para enfocarme más en esta técnica.
googletorp
10
Si bien evitar buscar el DOM repetidamente es algo bueno: el último ejemplo es un desastre ilegible en el que no tengo idea de lo que está sucediendo. Si planea usar el resultado de una búsqueda varias veces, guárdelo en una variable. Hace que el código sea mucho más fácil de mantener.
Quentin
12

Siempre almacene $ (this) en una variable significativa, especialmente en un .each ()

Me gusta esto

$(selector).each(function () {
    var eachOf_X_loop = $(this); 
})
adardesign
fuente
12
Use $selfo $thissi es demasiado vago para pensar en un buen nombre de variable.
gradbot
10

Similar a lo que dijo Repo Man, pero no del todo.

Cuando desarrollo win.NET de ASP, a menudo lo hago

$('<%= Label1.ClientID %>');

olvidando el signo #. La forma correcta es

$('#<%= Label1.ClientID %>');
Ron
fuente
10

Eventos

$("selector").html($("another-selector").html());

no clona ninguno de los eventos; debes volver a vincularlos a todos.

Según el comentario de JP, t - clone () vuelve a unir los eventos si pasa true.

Chris S
fuente
44
Clone () lo hace si pasa verdadero.
James
¿Qué pasa con live () en jQuery 1.3.2?
jmav
9

Evite la creación múltiple de los mismos objetos jQuery

//Avoid
function someFunc(){
   $(this).fadeIn();
   $(this).fadeIn();
}

//Cache the obj
function someFunc(){
   var $this = $(this).fadeIn();
   $this.fadeIn();
}
redsquare
fuente
var $ this = $ (this) .fadeIn () ;? estás almacenando un efecto?
Jason
12
devuelve el elemento, se llama encadenamiento!
Redsquare
¿Puedes establecer una variable y realizar una acción sobre ella al mismo tiempo?
Jason
1
De hecho, pero no confíes en mi palabra. Intentalo. ¿Cómo cree que es posible lo siguiente si no se devuelve el objeto jquery que representa el elemento? $ ('# divId'). hide (). show (). fadeIn () .... etc
redsquare
14
Eso funciona, pero creo que es más legible tenerlo $this = $(this);en una línea separada. Si puede (sin ensuciar), olvídese $thisy $(this).fadeIn().fadeIn();
encadene
8

También digo esto para JavaScript, pero jQuery, JavaScript NUNCA debería reemplazar a CSS.

Además, asegúrese de que el sitio sea utilizable para alguien con JavaScript desactivado (no tan relevante hoy como en el pasado, pero siempre es bueno tener un sitio totalmente utilizable).

Martin
fuente
6

Haciendo demasiadas manipulaciones DOM. Si bien los métodos .html (), .append (), .prepend (), etc. son excelentes, debido a la forma en que los navegadores procesan y vuelven a procesar las páginas, usarlos con demasiada frecuencia provocará retrasos. A menudo es mejor crear el html como una cadena e incluirlo en el DOM una vez, en lugar de cambiarlo varias veces.

En vez de:

var $parent = $('#parent');
var iterations = 10;

for (var i = 0; i < iterations; i++){
    var $div = $('<div class="foo-' + i + '" />');
    $parent.append($div);
}

Prueba esto:

var $parent = $('#parent');
var iterations = 10;
var html = '';

for (var i = 0; i < iterations; i++){
    html += '<div class="foo-' + i + '"></div>';
}

$parent.append(html);

O incluso esto ($ wrapper es un elemento recién creado que aún no se ha inyectado al DOM. Agregar nodos a este contenedor wrap div no causa ralentizaciones, y al final agregamos $ wrapper a $ parent, usando solo una manipulación DOM ):

var $parent = $('#parent');
var $wrapper = $('<div class="wrapper" />');
var iterations = 10;

for (var i = 0; i < iterations; i++){
    var $div = $('<div class="foo-' + i + '" />');
    $wrapper.append($div);
}

$parent.append($wrapper);
Alex Heyd
fuente
+1 ... Estoy usando .html () en varios elementos cada segundo. ¡Noté que comienza a ralentizar todo!
Usuario2
5

Usar ClientID para obtener la identificación "real" del control en proyectos ASP.NET.

jQuery('#<%=myLabel.ClientID%>');

Además, si está utilizando jQuery dentro de SharePoint, debe llamar a jQuery.noConflict ().

Jacobs Data Solutions
fuente
11
? ¿Cómo es esto una trampa? Es una solución alternativa para el comportamiento de ASP.NET.
SolutionYogi el
1
Si. No es un problema de jQuery. Es culpa de los formularios web asp.net.
Redsquare
3
Convenido. Pero esto es algo que debe tener en cuenta al usar jQuery en ASP.NET independientemente.
Jacobs Data Solutions
2
el OP no mencionó asp.net
redsquare
4

Pasar ID en lugar de objetos jQuery a funciones:

myFunc = function(id) { // wrong!
    var selector = $("#" + id);
    selector.doStuff();
}

myFunc("someId");

Pasar un conjunto envuelto es mucho más flexible:

myFunc = function(elements) {
    elements.doStuff();
}

myFunc($("#someId")); // or myFunc($(".someClass")); etc.
Craig Stuntz
fuente
3

Uso excesivo de encadenamiento.

Mira esto:

this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);

Explicación

2 revoluciones
fuente
1
Parece divertido, es una especie de ofuscación.
Dykam el
66
El encadenamiento (por sí mismo) es difícil de usar 'en exceso'. Parece que ese código hace un uso excesivo del operador ternario de JavaScript. Consulte en.wikipedia.org/wiki/Ternary_operation#JavaScript para obtener más información.
Dan Esparza el
3
Me alegro de no tener que mantener tu código.
cdmckay
3

Utilice cadenas de estilo acumulador

Usando el operador +, se crea una nueva cadena en la memoria y se le asigna el valor concatenado. Solo después de esto, el resultado se asigna a una variable. Para evitar la variable intermedia para el resultado de concatenación, puede asignar directamente el resultado usando el operador + =. Lento:

a += 'x' + 'y';

Más rápido:

a += 'x';
a += 'y';

Las operaciones primitivas pueden ser más rápidas que las llamadas a funciones

Considere el uso de operaciones primitivas alternativas sobre llamadas de función en bucles y funciones críticas de rendimiento. Lento:

var min = Math.min(a, b);
arr.push(val);

Más rápido:

var min = a < b ? a : b;
arr[arr.length] = val;

Lea más en JavaScript Mejores prácticas de rendimiento

Pir Abdul
fuente
1

Si desea que los usuarios vean entidades html en su navegador, use 'html' en lugar de 'texto' para inyectar una cadena Unicode, como:

$('p').html("Your Unicode string")
Patrick J. Anderson
fuente
1

Mis dos centavos)

Por lo general, trabajar con jquery significa que no tiene que preocuparse por los elementos DOM reales todo el tiempo. Puede escribir algo como esto, $('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})y este código se ejecutará sin arrojar ningún error.

En algunos casos esto es útil, en algunos casos, para nada, pero es un hecho que jquery tiende a ser, bueno, compatible con los partidos vacíos. Todavía,replaceWith arrojará un error si uno intenta usarlo con un elemento que no pertenece al documento. Lo encuentro bastante contra-intuitivo.

Otro error es, en mi opinión, el orden de los nodos devueltos por el método prevAll () - $('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll(). No es un gran problema, en realidad, pero debemos tener en cuenta este hecho.

shabunc
fuente
0

Si planea Ajax en muchos datos, como por ejemplo, 1500 filas de una tabla con 20 columnas, entonces ni siquiera piense en usar jQuery para insertar esos datos en su HTML. Use JavaScript simple. jQuery será demasiado lento en máquinas más lentas.

Además, la mitad del tiempo, jQuery hará cosas que harán que sea más lento, como tratar de analizar las etiquetas de script en el HTML entrante y tratar las peculiaridades del navegador. Si desea una velocidad de inserción rápida, utilice JavaScript simple.

mkoryak
fuente
1
-1 La función .html () es tan rápida como el enfoque nativo
cllpse
obviamente, todos los que me votaron negativamente no han intentado insertar una tonelada de DOM en IE y ver cómo las cosas se vuelven lentas. La razón por la que jquery es lento es que no solo insertará el dom, hace algunas otras cosas, como verificar si el dom tiene scripts y los ejecuta si está en IE, y algunas otras cosas que no necesita hacer si sabe exactamente qué tipo de datos está insertando
mkoryak
1
Siempre y cuando no necesite preocuparse por las fugas del navegador y tal, .innerHTMLlo hará. Pero si está creando algo como Gmail donde el usuario mantiene la pestaña abierta durante horas, solo tendrá que morder la bala y lidiar con la lentitud adicional. Para los curiosos, esto es exactamente lo que hace jQuery .html(): james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.html
adamJLev
-1

Usar jQuery en un pequeño proyecto que se puede completar con solo un par de líneas de JavaScript ordinario.

tornillo de banco
fuente
No me importa que me modifiquen, pero discuta su elección.
tornillo de banco
8
-1 jQuery abstrae una API rota. De esta manera, siempre está seguro de que su código está funcionando. Supongamos que ha escrito algo de código usando jQuery y se introduce un error aleatorio en el navegador con una nueva versión; todo lo que necesita hacer es importar una versión actualizada del marco jQuery. Contra tener que descubrir cómo resolver el error usted mismo.
cllpse
+1 me parece razonable: si usa solo unas pocas líneas, tenga sentido usar solo Vanilla JS.
alex
1
@roosteronacid, su argumento pierde el punto. Es muy poco probable que un navegador introduzca una regresión en una secuencia de comandos de menor complejidad, o que se ocupe de problemas entre navegadores. Hace dos años trabajé con mootools y, bajo ciertas circunstancias, no pude leer el contenido de un elemento en IE. Después de algunas horas de intentar resolver el problema, simplemente reescribí esa parte con js simple. Por lo tanto, es más probable que jQuery se rompa en lugar de que JavaScript falle debido a una actualización del navegador. Solucionaría un error yo mismo cualquier día en lugar de piratear un código de biblioteca.
tornillo de banco
3
couple of lines of ordinary JavaScriptClaro que no hay problema. ¿Pero cuándo es solo eso? Las personas que dicen "¿por qué no usar vanilla javascript?" IE aún no me ha mordido lo suficiente ... y sin mencionar la cantidad de código sin formato y repetitivo que tiene que escribir para hacer cosas simples en JS.
adamJLev
-3

No entiendo el evento vinculante. JavaScript y jQuery funcionan de manera diferente.

Por demanda popular, un ejemplo:

En jQuery:

$("#someLink").click(function(){//do something});

Sin jQuery:

<a id="someLink" href="page.html" onClick="SomeClickFunction(this)">Link</a>
<script type="text/javascript">
SomeClickFunction(item){
    //do something
}
</script>

Básicamente, los ganchos necesarios para JavaScript ya no son necesarios. Es decir, uso el marcado en línea (onClick, etc.) porque simplemente puede usar los ID y las clases que un desarrollador normalmente aprovecharía para fines de CSS.

Jason
fuente
55
¿Cuidado para elaborar? Preferiblemente un ejemplo?
SoluciónYogi
77
¿JavaScript no proporciona addEventListener () y attachEvent () para hacer esto?
alex
2
separación de preocupaciones, hombre. Mantenga su HTML y JS separados
Don