armadilhas do jQuery para evitar [fechado]

210

Estou iniciando um projeto com jQuery.

Que armadilhas / erros / equívocos / abusos / abusos você teve no seu projeto jQuery?

flybywire
fonte
4
Isso não deveria ter sido fechado por ser "não construtivo". Algumas respostas muito úteis se materializaram e a pergunta já foi marcada 220 vezes. Por favor vote para reabrir, se você tiver karma suficiente.
Roy Prins
Parece-me, jQuery é uma armadilha em si
gromit190

Respostas:

189

Desconhecer o desempenho atingido e usar em excesso os seletores em vez de atribuí-los a variáveis ​​locais. Por exemplo:-

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

Ao invés de:-

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

Ou ainda melhor com encadeamento : -

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

Eu achei isso o momento esclarecedor em que percebi como as pilhas de chamadas funcionam.

Editar: sugestões incorporadas nos comentários.

Gavin Gilmour
fonte
16
+1 para o link do youtube. droga, eu aprendi muito.
4139 Jason
23
Eu acho que atribuir coisas a variáveis ​​locais é ótimo, mas não se esqueça do poder do encadeamento (do seu exemplo): $ ("# label"). Method (). Method2 (). Css ("background-color", " vermelho");
Lance McNearney
O vídeo do YouTube foi ótimo. Eu já vi outras apresentações do Google sobre o assunto e ainda aprendi algumas coisas! Obrigado!
Gabriel Hurley
+1 para o link também, excelente!
21139 Josh Stodola
7
É uma convenção usar um cifrão para variáveis ​​com o contexto jQuery. Assim, você pode querer escrevervar $label = $('#label');
Tim Buthe
90

Entenda como usar o contexto. Normalmente, um seletor de jQuery pesquisará todo o documento:

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

Mas você pode acelerar as coisas pesquisando dentro de um contexto:

var ct = $('#myContainer');
// This will search for elements with class myClass within the myContainer child elements
$('.myClass', ct);
slolife
fonte
9
Aaaaaaah! Bem, são cerca de 1.000.000 de meus bugs corrigidos. +1
jammus 6/08/09
4
Parece que seu último ponto é incorreta - groups.google.co.uk/group/jquery-dev/browse_thread/thread/...
James
1
Obrigado por apontar isso para o JP. Agora, o que fazer ... Devo excluir minha resposta para que ninguém mais fique louco e mude seu código por nada?
Slolife 14/08/09
Ainda é um bom ponto, em termos de otimização. :)
James
2
O jQuery verifica se o contexto é uma instância do jQuery, portanto não há razão para isso [0]. $('.myClass', ct);ou se você sabe ct é uma instância de jQuery você pode usar encontrarct.find(".myClass")
gradbot
62

Não use seletores de classe simples, como este:

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

Isso acabará analisando cada elemento para ver se ele possui uma classe de "botão".

Em vez disso, você pode ajudá-lo, como:

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

Eu aprendi isso no ano passado com no blog Rebecca Murphy

Atualização - Esta resposta foi dada há mais de 2 anos e não está correta para a versão atual do jQuery. Um dos comentários inclui um teste para provar isso. Há também uma versão atualizada do teste que inclui a versão do jQuery no momento desta resposta.

BrianH
fonte
6
Eu também estava com a impressão de que o inverso era verdadeiro. Talvez este seja o caso em navegadores que não implementam getElementsByClassName, mas, caso contrário, você está apenas dando mais trabalho ao jQuery. Eu gostaria muito de ver Rebecca postar alguns benchmarks :)
Alex Barrett
7
Você está reduzindo a quantidade de trabalho que ele tem que fazer. É como dizer a alguém para tirar as meias da gaveta da sua cômoda, em vez de dizer para que tirem as meias do seu quarto. Reduz a quantidade de 'aparência' necessária substancialmente.
Sneakyness
4
O inverso é verdadeiro quando você está escrevendo CSS (pelo menos incluindo a tag do elemento). Consulte code.google.com/speed/page-speed/docs/…
kmiyashiro
7
@ Sneakyness Nem tudo tem um análogo preciso da vida real. Por exemplo, $('.b')poderia usar document.getElementsByClassName('b')se o navegador suportar, mas isso $('a.b')fará com que ele obtenha todos os elementos correspondentes com a classe be confirme se são âncoras em uma operação de dois estágios. O último parece mais trabalho para mim. Para uma analogia da vida real, tente o seguinte: Encontre todas as meias no meu quarto. Agora, jogue fora os que não estão na minha cômoda.
alex
2
Acredito que o equívoco nos seletores se deva ao fato de que nas versões mais antigas do jquery era mais rápido fazer $ ('# foo') do que $ ('div # foo'), pois, por definição, um id é único. Eu tenho certeza que isso foi corrigido em versões posteriores no entanto, mas essa recomendação aplicada apenas para ids, e não outros tipos de seletores
Alex Heyd
35

Tente dividir funções anônimas para poder reutilizá-las.

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

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

$('#div').click( divClickFn );
quadrado vermelho
fonte
19
Acho que isso se aplica aproximadamente ao mesmo grau em que o código síncrono (em linha) deve ser dividido em funções nomeadas. Se você tem um pedaço de código que está implorando para receber um nome, vá em frente. Mas não mova o código para fora da linha simplesmente porque você o está inserindo em uma função; funções anônimas existem por um bom motivo.
Dan Breslau
4
Na verdade, eu gosto de dar 'nome' à minha função. É muito útil quando você está depurando o código e, em vez de ver uma lista interminável de funções anônimas, vê funções nomeadas corretamente.
SolutionYogi
1
Seu ponto de vista está bem entendido, e eu provavelmente já fui enganado por isso algumas vezes. Mesmo assim, " aproximadamente o mesmo grau" ainda funciona para mim.
21411 Dan Breslau
1
esp. se a ligação estiver acontecendo em um loop!
daniellmb
As funções nomeadas também beneficiam muito você durante a depuração; nada é mais péssimo do que olhar para uma pilha de chamadas com 8 níveis de profundidade que nada mais tem (anonymous). Leia mais sobre esta dica aqui: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…
ken
34
  • Evite abusar do documento pronto.
  • Mantenha o documento pronto apenas para o código de inicialização.
  • Sempre extraia funções fora do documento prontas para que possam ser reutilizadas.

Eu já vi centenas de linhas de código dentro da instrução doc ready. Feio, ilegível e impossível de manter.

Peter Mortensen
fonte
6
+1. Em geral, a maioria do código jQuery que eu vi usa funções com centenas de linhas. Não sei por que 'desenvolvedores de jQuery' não gostam de usar funções menores.
SolutionYogi
6
@SolutionYogi porque a maioria são apenas JS noobs?
adamJLev
Eu sou a favor de não colocar funções muito longas no documento pronto, esse é um bom conselho. No entanto, criar muitas funções de componentes pequenos executadas a partir de uma função abrangente que não está pronta para o documento não é necessariamente a melhor prática. Se a função abrangente for a única que usa esses trechos de código, é melhor colocar tudo na única função, mesmo que seja mais difícil de ler. A chamada de funções tem muita sobrecarga e, se você estiver usando apenas o código em um contexto, deve ser evitado.
precisa saber é o seguinte
34

Ao usar a $.ajaxfunção para solicitações do Ajax para o servidor, evite usar o completeevento para processar dados de resposta. Será acionado se a solicitação foi bem-sucedida ou não.

Em vez de completeusar success.

Consulte Eventos do Ajax nos documentos.

Patrick McElhaney
fonte
1
Eu estive indo e voltando sobre o sucesso x completo, você pode expandir por que você acha que completo é melhor?
Neil N
1
Não estou dizendo que completo é melhor. O que eu estava tentando dizer é que você precisa evitar o uso enganoso de completo e deve usar o sucesso para poder processar os dados de resposta.
Artem Barger
2
Bem, sempre é chamado. No entanto, eu discordo. Concluir é melhor para ocultar um gif de carregamento, etc. Você deve usar o êxito para lidar com a resposta e o erro para qualquer erro, é claro.
Redsquare #
1
Ele está sugerindo usar o sucesso em vez de concluir. 'complete' sempre é acionado quando a solicitação ajax é 'complete', não importa se foi concluída com êxito ou sem êxito.
SolutionYogi
@redsquare, você pode expandir exatamente o que não concorda? Eu estava me referindo ao processo de dados e não me importei com as imagens ocultando / mostrando oportunidades que você tem com o manipulador completo.
Artem Barger
24

Eventos de animação em "encadeamento" com retornos de chamada.

Suponha que você queira animar um parágrafo que desaparece ao clicar nele. Você também quis remover o elemento do DOM posteriormente. Você pode pensar que pode simplesmente encadear os métodos:

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

Neste exemplo, .remove () será chamado antes que .fadeOut () seja concluído, destruindo seu efeito de desbotamento gradual e simplesmente fazendo o elemento desaparecer instantaneamente. Em vez disso, quando você deseja acionar um comando apenas após concluir o anterior, use os retornos de chamada:

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

O segundo parâmetro de .fadeOut () é uma função anônima que será executada quando a animação .fadeOut () for concluída. Isso cria um desbotamento gradual e uma remoção subsequente do elemento.

Sampson
fonte
24

Se você ligar () o mesmo evento várias vezes, ele será acionado várias vezes. Eu costumo sempre ir unbind('click').bind('click')apenas por segurança

Scott Evernden
fonte
2
Isso não é específico para o jQuery, embora seja importante ter em mente.
SolutionYogi
11
Você pode usar eventos ao vivo para não precisar vincular o mesmo evento duas vezes.
Powerlord 4/08/09
o live tem seus próprios problemas (desempenho) se usado em excesso. Melhor na 1.3.3, onde você pode dar contexto.
Redsquare #
23

Não abuse dos plug-ins.

Na maioria das vezes, você precisará apenas da biblioteca e talvez da interface do usuário. Se você simplificar, seu código poderá ser mantido a longo prazo. Nem todos os plug-ins são suportados e mantidos, na verdade a maioria não. Se você pode imitar a funcionalidade usando os elementos principais, recomendo fortemente.

Os plug-ins são fáceis de inserir no seu código, economizam um pouco de tempo, mas quando você precisar de algo extra, é uma má idéia modificá-los, pois você perde as atualizações possíveis. O tempo que você economiza no início, perde mais tarde alterando os plug-ins obsoletos.

Escolha os plug-ins que você usa com sabedoria. Além da biblioteca e da interface do usuário, uso constantemente $ .cookie , $ .form , $ .validate e thickbox . De resto, desenvolvo principalmente meus próprios plug-ins.

Elzo Valugi
fonte
2
E a grade? Você faz o seu próprio?
jmav
sim. de projeto para dados do projeto, vem de várias maneiras. Eu prefiro ter controle total de que perceber essa grade só me ajuda ao meio e depois tenho que improvisar.
Elzo Valugi 28/10/09
Se {tiver tempo suficiente, geralmente prefiro escrever todo o código de manipulação de dados (css / html) diretamente. em outras palavras - não passe dados para um 'plugin' e faça com que ele vomite html. é difícil o suficiente avaliar (o meio-campo dos) plugins para compatibilidade de escopo atual, esquecer as demandas futuras. pense ... designers, planejadores, gerentes, gerentes, gerentes. ah, clientes e usuários. mas se você tiver todas essas coisas, não terá o suficiente do dito 'tempo'. então basta usar o jqgrid já - você está perdendo tempo deliberando. já está pronto?}
user406905
22

Armadilha: Usando loops em vez de seletores.

Se você encontrar o método jQuery '.each' para iterar sobre os elementos DOM, pergunte a si mesmo se pode usar um seletor para obter os elementos.

Mais informações sobre os seletores jQuery:
http://docs.jquery.com/Selectors

Armadilha: NÃO use uma ferramenta como o Firebug

O Firebug foi praticamente criado para esse tipo de depuração. Se você estiver mexendo no DOM com Javascript, precisará de uma boa ferramenta como o Firebug para lhe dar visibilidade.

Mais informações sobre o Firebug: http://getfirebug.com/

Outras grandes idéias estão neste episódio do Podcast Polimórfico: (Segredos do jQuery com Dave Ward) http://polymorphicpodcast.com/shows/jquery/

Dan Esparza
fonte
1
Eu fiz o primeiro muitas vezes. Você só precisa se lembrar que a maioria das funções do jQuery operará em todos os elementos retornados de um seletor.
DisgruntledGoat
Não gosto do método .each para ser honesto
Simon Hayter
14

Incompreensão de usar esse identificador no contexto certo. Por exemplo:

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

E aqui uma das amostras como você pode resolvê-lo:

$( "#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
fonte
1
+1 Mais um problema de javascript do que um problema de jquery, mas eu costumava ser muito enganado por isso.
Mccaulay #
13

Evite pesquisar o DOM inteiro várias vezes. Isso é algo que realmente pode atrasar seu script.

Ruim:

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

Boa:

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

Ruim:

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

Boa:

$("#form")
    .find(".text").this().end()
    .find(".int").that().end()
    .find(".choice").method();
googletorp
fonte
2
$ (". aclass"). this (). that (); não é bom! classe apenas seletores são lentos
redsquare
É um exemplo ilustrativo que mostra a capacidade do Jquery de usar vários métodos em uma seleção. Tornei a seleção simples (e, portanto, lenta) para dar maior foco a essa técnica.
Googletorp 5/08/09
10
Evitar procurar no DOM repetidamente é uma coisa boa - o último exemplo é uma bagunça ilegível na qual não tenho idéia do que está acontecendo. Se você planeja usar o resultado de uma busca várias vezes, armazene-o em uma variável. Torna o código muito mais sustentável.
Quentin
12

Sempre armazene em cache $ (this) em uma variável significativa, especialmente em um .each ()

Como isso

$(selector).each(function () {
    var eachOf_X_loop = $(this); 
})
adardesign
fonte
12
Use $selfou $thisse você estiver com preguiça de pensar em um bom nome de variável.
gradbot 14/05
10

Semelhante ao que Repo Man disse, mas não exatamente.

Ao desenvolver winforms do ASP.NET, costumo

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

esquecendo o sinal #. A forma correta é

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

Eventos

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

não clona nenhum dos eventos - você precisa religar todos eles.

De acordo com o commen do JP - clone () rebaixa os eventos se você passar true.

Chris S
fonte
4
Clone () faz se você for verdadeiro.
James
E o live () no jQuery 1.3.2?
jmav
9

Evite a criação múltipla dos mesmos objetos jQuery

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

//Cache the obj
function someFunc(){
   var $this = $(this).fadeIn();
   $this.fadeIn();
}
redsquare
fonte
var $ this = $ (this) .fadeIn () ;? você está armazenando um efeito em cache?
4139 Jason
12
retorna o elemento, é chamado encadeamento!
Redsquare #
você pode definir uma variável e executar uma ação nela ao mesmo tempo?
Jason
1
De fato, mas não aceite minha palavra. Tente. Como você acha que o seguinte é possível se o objeto jquery que representa o elemento não for retornado? $ ('# divId'). hide (). show (). fadeIn () .... etc
redsquare
14
Isso funciona, mas acho que é mais legível ter $this = $(this);em uma linha separada. Se você pode (sem fazer uma bagunça), esqueça $thise encadeie tudo:$(this).fadeIn().fadeIn();
Patrick McElhaney 5/09/09
8

Eu digo isso também para JavaScript, mas jQuery, JavaScript NUNCA deve substituir o CSS.

Além disso, verifique se o site é utilizável por alguém com o JavaScript desativado (não tão relevante hoje como no passado, mas sempre bom ter um site totalmente utilizável).

Martin
fonte
6

Fazendo muitas manipulações DOM. Embora os métodos .html (), .append (), .prepend () etc. sejam ótimos, devido à maneira como os navegadores renderizam e renderizam novamente as páginas, usá-los com muita freqüência causará lentidão. Geralmente, é melhor criar o html como uma string e incluí-lo no DOM uma vez, em vez de alterá-lo várias vezes.

Ao invés de:

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

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

Tente o seguinte:

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

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

$parent.append(html);

Ou mesmo isso ($ wrapper é um elemento recém-criado que ainda não foi injetado no DOM. O acréscimo de nós a essa div do wrapper não causa lentidão e, no final, anexamos o $ wrapper ao $ parent, usando apenas uma manipulação do 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
fonte
+1 ... estou usando .html () em vários elementos a cada segundo. Percebeu que começa a desacelerar tudo!
usar o seguinte
5

Usando ClientID para obter a identificação "real" do controle em projetos ASP.NET.

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

Além disso, se você estiver usando o jQuery no SharePoint, deverá chamar jQuery.noConflict ().

Jacobs Data Solutions
fonte
11
? Como isso é uma armadilha? É uma solução alternativa para o comportamento do ASP.NET.
SolutionYogi
1
Sim. Não é um problema do jQuery. É uma falha dos formulários da web asp.net.
Redsquare #
3
Acordado. Mas isso é algo que você precisa estar ciente ao usar o jQuery no ASP.NET, independentemente.
7269 Jacobs Data Solutions
2
o OP não mencionou asp.net
redsquare
4

Passando IDs em vez de objetos jQuery para funções:

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

myFunc("someId");

Passar um conjunto embrulhado é muito mais flexível:

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

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

Uso excessivo de encadeamento.

Veja isso:

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

Explicação

SolutionYogi
fonte
1
Parece engraçado, é uma espécie de ofuscação.
Dykam 04/08/09
6
O encadeamento (por si só) é difícil de usar 'em excesso'. Parece que esse código faz uso excessivo do operador ternário javascript. Consulte en.wikipedia.org/wiki/Ternary_operation#JavaScript para obter mais informações.
2111 Dan Esparza
3
Estou feliz por não precisar manter seu código.
Cdmckay 11/11/2009
3

Use cadeias no estilo acumulador

Usando o operador +, uma nova string é criada na memória e o valor concatenado é atribuído a ela. Somente depois disso, o resultado é atribuído a uma variável. Para evitar a variável intermediária para o resultado da concatenação, você pode atribuir diretamente o resultado usando o operador + =. Lento:

a += 'x' + 'y';

Mais rápido:

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

Operações primitivas podem ser mais rápidas que chamadas de função

Considere o uso de operação primitiva alternativa sobre chamadas de função em loops e funções críticas de desempenho. Lento:

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

Mais rápido:

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

Leia mais em JavaScript Performance Best Practices

Pir Abdul
fonte
1

Se você deseja que os usuários vejam entidades html no navegador, use 'html' em vez de 'text' para injetar uma string Unicode, como:

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

meus dois centavos)

Geralmente, trabalhar com jquery significa que você não precisa se preocupar com elementos DOM reais o tempo todo. Você pode escrever algo como isto - $('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})- e esse código será executado sem gerar erros.

Em alguns casos, isso é útil, em alguns casos - nem um pouco, mas é um fato que o jquery tende a ser, bem, compatível com partidas vazias. Ainda,replaceWith lançará um erro se alguém tentar usá-lo com um elemento que não pertence ao documento. Acho isso bastante contra-intuitivo.

Outra armadilha é, na minha opinião, a ordem dos nós retornados pelo método prevAll () - $('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll(). Não é grande coisa, na verdade, mas devemos ter em mente esse fato.

shabunc
fonte
0

Se você planeja usar o Ajax em muitos dados, como, digamos, 1500 linhas de uma tabela com 20 colunas, nem pense em usar o jQuery para inserir esses dados em seu HTML. Use JavaScript simples. O jQuery será muito lento em máquinas mais lentas.

Além disso, na metade do tempo o jQuery fará coisas que o tornarão mais lento, como tentar analisar as tags de script no HTML recebido e lidar com as peculiaridades do navegador. Se você deseja uma velocidade de inserção rápida, use JavaScript simples.

mkoryak
fonte
1
-1 O .html () função é apenas tão rapidamente como a abordagem nativa
cllpse
obviamente, todo mundo que está votando contra mim ainda não tentou inserir uma tonelada de DOM no IE e ver as coisas ficarem lentas. O motivo pelo qual o jquery é lento é que ele simplesmente não insere o dom, ele faz algumas outras coisas, como verificar se o dom possui scripts e os executa se estiver no IE, e algumas outras coisas que você não precisa fazer se souber exatamente que tipo de dados você está inserindo
mkoryak
1
Contanto que você não precise se preocupar com vazamentos do navegador e tal, o .innerHTMLfará. Mas se você estiver criando algo como o Gmail, em que o usuário mantém a aba aberta por horas, você terá que aceitar o problema e lidar com a lentidão extra. Para os curiosos, aqui está exatamente o que o jQuery .html()faz: james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.html
adamJLev
-1

Usando o jQuery em um projeto pequeno que pode ser concluído com apenas algumas linhas de JavaScript comum.

vise
fonte
Não me importo de ser modificado, mas por favor discuta sua escolha.
vise
8
-1 O jQuery abstrai uma API quebrada. Dessa forma, você sempre tem certeza de que seu código está funcionando. Digamos que você tenha escrito algum código usando o jQuery e que algum bug aleatório do navegador seja introduzido com uma nova versão - tudo o que você precisa fazer é importar uma versão atualizada da estrutura do jQuery. Versus ter que descobrir como resolver o erro sozinho.
Cllpse 14/09/09
O +1 parece razoável para mim - se você estiver usando apenas algumas linhas, faça sentido usar apenas o vanilla JS.
Alex
1
@roosteronacid, seu argumento perde o ponto. É muito improvável que um navegador introduza uma regressão em um script de menor complexidade ou que lide com problemas de navegador cruzado. Há dois anos, eu trabalhei com mootools e, em uma determinada circunstância, não foi possível ler o conteúdo de um elemento no IE. Depois de algumas horas tentando descobrir o problema, reescrevi essa parte com js simples. Portanto, é mais provável que o jQuery quebre, em vez de javascript simples falhar devido a uma atualização do navegador. Eu resolveria um erro sozinho qualquer dia, em vez de invadir um código de biblioteca.
15/09/09
3
couple of lines of ordinary JavaScriptClaro que não há problema. Mas quando é que é só isso? Pessoas que dizem "por que não usar javascript vanilla ??" ainda não foi mordido o suficiente pelo IE ... e para não mencionar quanto código de cruft e clichê você precisa escrever para fazer coisas simples em JS simples e antigo.
adamJLev
-3

Não entendendo a ligação de eventos. JavaScript e jQuery funcionam de maneira diferente.

Por demanda popular, um exemplo:

No jQuery:

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

Sem jQuery:

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

Basicamente, os ganchos necessários para JavaScript não são mais necessários. Ou seja, use a marcação embutida (onClick, etc), porque você pode simplesmente usar os IDs e classes que um desenvolvedor usaria normalmente para fins de CSS.

Jason
fonte
5
Cuidado ao elaborar? De preferência um exemplo?
SolutionYogi
7
O JavaScript não fornece addEventListener () e attachEvent () para fazer isso?
Alex
2
separação de preocupações, cara. Mantenha o seu HTML e JS separar
Don