Insidie ​​di jQuery da evitare [chiuso]


210

Sto iniziando un progetto con jQuery.

Quali insidie ​​/ errori / idee sbagliate / abusi / abusi hai avuto nel tuo progetto jQuery?


4
Questo non avrebbe dovuto essere chiuso per essere "non costruttivo". Si sono concretizzate alcune risposte molto utili e la domanda è stata recitata 220 volte. Si prega di votare per riaprire, se si dispone di karma sufficiente.
Roy Prins,

Mi sembra, jQuery è una trappola in sé
gromit190

Risposte:


189

Ignorare il risultato prestazionale e abusare dei selettori invece di assegnarli alle variabili locali. Per esempio:-

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

Piuttosto che:-

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

O ancora meglio con il concatenamento : -

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

Ho trovato questo il momento illuminante in cui ho capito come funzionano le pile di chiamate.

Modifica: suggerimenti incorporati nei commenti.


16
+1 per il link di YouTube. santa merda ho imparato molto.
Jason,

23
Penso che assegnare cose alle variabili locali sia grandioso, ma non dimenticare il potere del concatenamento (dal tuo esempio): $ ("# label"). Method (). Method2 (). Css ("background-color", " rosso");
Lance McNearney,

Il video di YouTube è stato fantastico. Ho visto altre presentazioni di Google sull'argomento e ho ancora imparato alcune cose! Grazie!
Gabriel Hurley,

+1 anche per il link, eccellente!
Josh Stodola,

7
È una specie di convenzione usare un segno di dollaro per variabili con contesto jQuery. Quindi potresti voler scriverevar $label = $('#label');
Tim Büthe

90

Comprendi come utilizzare il contesto. Normalmente, un selettore jQuery cercherà l'intero documento:

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

Ma puoi accelerare le cose cercando in un contesto:

var ct = $('#myContainer');
// This will search for elements with class myClass within the myContainer child elements
$('.myClass', ct);

9
Aaaaaaah! Bene, sono stati risolti circa 1.000.000 dei miei bug. +1
jammus,

4
Sembra che il tuo ultimo punto sia errato - groups.google.co.uk/group/jquery-dev/browse_thread/thread/…
James

1
Grazie per averlo segnalato JP. Ora, cosa fare ... Devo cancellare la mia risposta in modo che nessun altro si scateni e cambi il codice per niente?
slolife,

No, è ancora un buon punto, per quanto riguarda l'ottimizzazione. :)
James,

2
jQuery controlla se il contesto è un'istanza di jQuery, quindi non c'è motivo [0]. $('.myClass', ct);o se sai che ct è un'istanza di jQuery puoi usare findct.find(".myClass")
gradbot

62

Non utilizzare i selettori di classe nudi, in questo modo:

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

Questo finirà per guardare ogni singolo elemento per vedere se ha una classe di "pulsante".

Invece, puoi dare una mano, come:

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

L'ho imparato l'anno scorso dal blog di Rebecca Murphy

Aggiornamento : questa risposta è stata data oltre 2 anni fa e non è corretta per la versione corrente di jQuery. Uno dei commenti include un test per dimostrarlo. Esiste anche una versione aggiornata del test che include la versione di jQuery al momento della risposta.


6
Avevo anche l'impressione che fosse vero il contrario. Forse questo è il caso dei browser che non implementano getElementsByClassName, ma per il resto stai solo dando a jQuery più lavoro da fare. Mi piacerebbe molto vedere Rebecca pubblicare alcuni benchmark :)
Alex Barrett,

7
Stai riducendo la quantità di lavoro che deve fare. È come dire a qualcuno di tirare fuori i calzini dal cassetto nel comò invece di dire loro di portare i calzini fuori dalla tua stanza. Riduce la quantità di "aspetto" che deve fare sostanzialmente.
Sneakyness il

4
È vero il contrario quando si scrive CSS (almeno includendo il tag element). Vedi code.google.com/speed/page-speed/docs/…
kmiyashiro

7
@Sneakyness Non tutto ha un analogo accurato della vita reale. Ad esempio, $('.b')potrebbe essere utilizzato document.getElementsByClassName('b')se il browser lo supporta, ma fare in $('a.b')modo che ottenga tutti gli elementi corrispondenti con classe be quindi confermare che sono ancore in un'operazione a due stadi. Quest'ultimo mi sembra più lavoro. Per un'analogia reale, prova questo: trova tutti i calzini nella mia stanza. Ora, butta quelli che non sono nel mio comò.
alex

2
Credo che il malinteso sui selettori sia dovuto al fatto che nelle versioni precedenti di jquery, era più veloce fare $ ('# foo') piuttosto che $ ('div # foo'), poiché per definizione, un ID è unico. Sono abbastanza sicuro che sia stato risolto nelle versioni successive, ma quella raccomandazione si applicava solo agli ID, non ad altri tipi di selettori
Alex Heyd,

35

Prova a dividere le funzioni anonime in modo da poterle riutilizzare.

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

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

$('#div').click( divClickFn );

19
Penso che ciò si applichi all'incirca nello stesso grado in cui il codice sincrono (inline) dovrebbe essere suddiviso in funzioni denominate. Se hai un pezzo di codice che ti sta chiedendo di ricevere un nome, allora cercalo. Ma non spostare il codice fuori linea semplicemente perché lo stai racchiudendo all'interno di una funzione; funzioni anonime esistono per una buona ragione.
Dan Breslau il

4
In realtà mi piace dare "nome" alla mia funzione. È molto utile quando si esegue il debug del codice e invece di visualizzare un elenco infinito di funzioni anonime, vengono visualizzate funzioni con nome appropriato.
SolutionYogi

1
Il tuo punto è ben preso, e probabilmente sono stato inciampato da me stesso alcune volte. Anche così, " all'incirca lo stesso grado" funziona ancora per me.
Dan Breslau,

1
esp. se l'associazione sta succedendo in un ciclo!
daniellmb,

Anche le funzioni nominate sono molto utili durante il debug; niente fa più schifo che guardare uno stack di 8 livelli profondi che non ha altro (anonymous). Leggi di più su questo suggerimento qui: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…
ken

34
  • Evitare di abusare di documenti pronti.
  • Mantieni il documento pronto solo per inizializzare il codice.
  • Estrarre sempre le funzioni esterne al documento in modo che possano essere riutilizzate.

Ho visto centinaia di righe di codice all'interno dell'istruzione doc ready. Brutto, illeggibile e impossibile da mantenere.


6
+1. In generale, la maggior parte del codice jQuery che ho visto utilizza funzioni con centinaia di righe. Non so perché agli "sviluppatori jQuery" non piaccia usare le funzioni più piccole.
SolutionYogi

6
@SolutionYogi perché la maggior parte sono solo JS?
adamJev

Sono tutto per non aver messo a disposizione funzioni molto lunghe nel documento, questo è un buon consiglio. Tuttavia, rendere molte funzioni di piccoli componenti eseguite da una funzione generale che non è pronta per il documento non è necessariamente la migliore pratica. Se la funzione generale è l'unica che utilizza quelle parti di codice, è meglio mettere tutto in un'unica funzione anche se è più difficile da leggere. La chiamata di funzioni ha un sacco di sovraccarico e se si utilizza il codice solo in un contesto, dovrebbe essere evitato.
sage88,

34

Durante l'utilizzo della $.ajaxfunzione per le richieste Ajax al server, è necessario evitare di utilizzare ilcomplete evento per elaborare i dati di risposta. Verrà attivato se la richiesta ha avuto esito positivo o meno.

Piuttosto che completeusaresuccess .

Vedi Eventi Ajax nei documenti.


1
Sono andato avanti e indietro tra il successo e il completo, puoi espandere il motivo per cui ritieni che completo sia meglio?
Neil N

1
Non sto dicendo che completo è meglio. Quello che stavo cercando di dire è che è necessario evitare l'uso fuorviante di completo e utilizzare il successo per poter elaborare i dati di risposta.
Artem Barger,

2
Beh, viene sempre chiamato. Tuttavia non sarei d'accordo. Completa è la cosa migliore per nascondere una gif di caricamento ecc. Dovresti usare il successo per gestire la risposta e l'errore per eventuali errori, ovviamente.
Redsquare

1
Sta suggerendo di usare il successo anziché il completo. 'complete' si attiva sempre quando la richiesta ajax è 'completa', non importa che sia stata completata con successo o senza successo.
SolutionYogi,

@redsquare, puoi approfondire esattamente ciò con cui non sei d'accordo? Mi riferivo al processo di elaborazione dei dati e non mi dispiaceva che nessuna immagine nascondesse / mostrasse opportunità che hai con il gestore completo.
Artem Barger,

24

Eventi di animazione "concatenati" con callback.

Supponiamo di voler animare un paragrafo che scompare facendo clic su di esso. Volevi anche rimuovere l'elemento dal DOM in seguito. Potresti pensare di poter semplicemente incatenare i metodi:

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

In questo esempio, .remove () verrà chiamato prima che .fadeOut () sia completato, distruggendo l'effetto di dissolvenza graduale e facendo semplicemente svanire immediatamente l'elemento. Invece, quando vuoi lanciare un comando solo dopo aver terminato il precedente, usa i callback:

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

Il secondo parametro di .fadeOut () è una funzione anonima che verrà eseguita una volta completata l'animazione .fadeOut (). Ciò provoca uno sbiadimento graduale e una successiva rimozione dell'elemento.


24

Se si associa () lo stesso evento più volte, verrà generato più volte. Di solito vado sempre unbind('click').bind('click')solo per essere al sicuro


2
Questo non è specifico di jQuery, sebbene sia importante tenere a mente.
SolutionYogi

11
È possibile utilizzare eventi live per non dover associare lo stesso evento due volte.
Powerlord,

live ha i suoi problemi (di performance) se usato in eccesso. Meglio in 1.3.3 dove puoi dare un contesto.
Redsquare,

23

Non abusare dei plug-in.

Il più delle volte avrai bisogno solo della libreria e forse dell'interfaccia utente. Se lo mantieni semplice, il tuo codice sarà gestibile a lungo termine. Non tutti i plug-in sono supportati e gestiti, in realtà la maggior parte non lo è. Se riesci a imitare la funzionalità utilizzando gli elementi principali, lo consiglio vivamente.

I plug-in sono facili da inserire nel codice, ti fanno risparmiare un po 'di tempo, ma quando hai bisogno di qualcosa in più, è una cattiva idea modificarli, poiché perdi i possibili aggiornamenti. Il tempo che risparmi all'inizio perderai in seguito alla modifica dei plug-in obsoleti.

Scegli i plug-in che usi saggiamente. Oltre alla libreria e all'interfaccia utente, utilizzo costantemente $ .cookie , $ .form , $ .validate e thickbox . Per il resto, sviluppo principalmente i miei plug-in.


2
Che dire della griglia? Tu fai il tuo?
jmav,

sì. dal progetto al progetto i dati arrivano in vari modi. Preferisco avere il pieno controllo che realizzare quella griglia mi aiuta solo a metà e quindi devo improvvisare.
Elzo Valugi,

SE {dato abbastanza tempo, generalmente preferisco scrivere direttamente tutto il codice di manipolazione basata sui dati (css / html). in altre parole: non passare i dati a un 'plug-in' e farli spargere html. è abbastanza difficile valutare (il centro di) plugin per l'attuale compatibilità con l'ambito, dimenticare le esigenze future. pensa ... designer, pianificatori, manager, manager, manager. oh e clienti e utenti. ma se hai tutte quelle cose, non avrai abbastanza del detto "tempo". quindi basta usare jqgrid già - stai perdendo tempo a pensare. è ancora finito?}
user406905

22

Trabocchetto: utilizzo di loop anziché selettori.

Se ti accorgi che stai cercando il metodo j.

Ulteriori informazioni sui selettori jQuery:
http://docs.jquery.com/Selectors

Trabocchetto: NON usare uno strumento come Firebug

Firebug è stato praticamente realizzato per questo tipo di debug. Se hai intenzione di muoverti nel DOM con Javascript, hai bisogno di un buon strumento come Firebug per darti visibilità.

Ulteriori informazioni su Firebug: http://getfirebug.com/

Altre grandi idee sono in questo episodio del Polymorphic Podcast: (jQuery Secrets with Dave Ward) http://polymorphicpodcast.com/shows/jquery/


1
Ho fatto il primo molte volte. Devi solo ricordare che la maggior parte delle funzioni jQuery funzionerà su tutti gli elementi restituiti da un selettore.
DisgruntledGoat

Non mi piace il metodo .each per essere onesti
Simon Hayter,

14

Incomprensione nell'uso di questo identificatore nel giusto contesto. Per esempio:

$( "#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 qui uno degli esempi su come risolverlo:

$( "#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.
   })
});

1
+1 Più un problema javascript che un problema jquery, ma ero solito inciampare in questo.
mmacaulay,

13

Evita di cercare più volte l'intero DOM. Questo è qualcosa che può davvero ritardare la tua sceneggiatura.

Male:

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

Buona:

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

Male:

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

Buona:

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

2
$ ( "Aclass") questo (), che ()..; non va bene! i selettori solo di classe sono lenti
redsquare il

È un esempio illustrativo che mostra la capacità di Jquery di usare diversi metodi su una selezione. Ho reso la selezione semplice (e quindi lenta) per concentrarmi maggiormente su questa tecnica.
googletorp,

10
Mentre evitare di cercare ripetutamente il DOM è una buona cosa - l'ultimo esempio è un pasticcio illeggibile in cui non ho idea di cosa stia succedendo. Se si prevede di utilizzare il risultato di un recupero più volte, archiviarlo in una variabile. Rende il codice molto più gestibile.
Quentin,

12

Memorizza sempre $ (questo) su una variabile significativa specialmente in un .each ()

Come questo

$(selector).each(function () {
    var eachOf_X_loop = $(this); 
})

12
Usa $selfo $thisse sei troppo pigro per pensare a un buon nome di variabile.
gradbot

10

Simile a quello che ha detto Repo Man, ma non del tutto.

Durante lo sviluppo di winform ASP.NET, lo faccio spesso

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

dimenticando il segno #. La forma corretta è

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

10

eventi

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

non clona nessuno degli eventi: devi ricollegarli tutti.

Come da commen t di JP, clone () rinnova gli eventi se passi true.


4
Clone () fa se si passa a true.
James,

Che dire di live () in jQuery 1.3.2?
jmav,

9

Evitare la creazione multipla degli stessi oggetti jQuery

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

//Cache the obj
function someFunc(){
   var $this = $(this).fadeIn();
   $this.fadeIn();
}

var $ this = $ (this) .fadeIn () ;? stai memorizzando un effetto nella cache?
Jason,

12
restituisce l'elemento, si chiama concatenamento!
Redsquare,

puoi impostare una variabile ed eseguire un'azione su di essa contemporaneamente?
Jason,

1
Anzi, ma non crederci sulla parola. Provalo. Come pensi che sia possibile quanto segue se l'oggetto jquery che rappresenta l'elemento non viene restituito? $ ('# divId'). hide (). show (). fadeIn () .... etc
redsquare

14
Funziona, ma penso che sia più leggibile avere $this = $(this);su una riga separata. Se puoi (senza fare casino), dimentica $thise incatena tutto:$(this).fadeIn().fadeIn();
Patrick McElhaney,

8

Lo dico anche per JavaScript, ma jQuery, JavaScript non dovrebbe MAI sostituire i CSS.

Inoltre, assicurati che il sito sia utilizzabile per qualcuno con JavaScript disattivato (non pertinente oggi come una volta, ma sempre bello avere un sito completamente utilizzabile).


6

Effettuare troppe manipolazioni DOM. Mentre i metodi .html (), .append (), .prepend (), ecc. Sono ottimi, a causa del modo in cui i browser visualizzano e ri-renderizzano le pagine, usarli troppo spesso causerà rallentamenti. Spesso è meglio creare l'html come stringa e includerlo una volta nel DOM, anziché modificarlo più volte.

Invece di:

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

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

Prova questo:

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 anche questo ($ wrapper è un elemento appena creato che non è stato ancora iniettato nel DOM. L'aggiunta di nodi a questo div wrapper non causa rallentamenti e alla fine aggiungiamo $ wrapper a $ parent, usando solo una manipolazione 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);

+1 ... Sto usando .html () su più elementi ogni secondo. Notato che inizia a rallentare tutto!
Utente2

5

Utilizzo di ClientID per ottenere l'id "reale" del controllo nei progetti ASP.NET.

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

Inoltre, se si utilizza jQuery in SharePoint, è necessario chiamare jQuery.noConflict ().


11
? Come è una trappola? È una soluzione alternativa per il comportamento ASP.NET.
SolutionYogi

1
Si. Non è un problema di jQuery. È colpa dei moduli web asp.net.
Redsquare

3
Concordato. Ma questo è qualcosa di cui devi essere consapevole quando usi jQuery in ASP.NET a prescindere.
Jacobs Data Solutions,

2
l'OP non ha menzionato asp.net
redsquare il

4

Passando ID invece di oggetti jQuery alle funzioni:

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

myFunc("someId");

Passare un set avvolto è molto più flessibile:

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

myFunc($("#someId")); // or myFunc($(".someClass")); etc.

3

Uso eccessivo di concatenamento.

Guarda questo:

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

Spiegazione


1
Sembra divertente, è una sorta di offuscamento.
Dykam,

6
Il concatenamento (da solo) è difficile da usare "in eccesso". Sembra che quel codice faccia un uso eccessivo dell'operatore ternario javascript. Vedi en.wikipedia.org/wiki/Ternary_operation#JavaScript per ulteriori informazioni.
Dan Esparza,

3
Sono contento di non dover mantenere il tuo codice.
cdmckay,

3

Usa lo stile dell'accumulatore di stringhe

Utilizzando l'operatore + viene creata una nuova stringa in memoria e gli viene assegnato il valore concatenato. Solo dopo questo il risultato viene assegnato a una variabile. Per evitare la variabile intermedia per il risultato di concatenazione, è possibile assegnare direttamente il risultato utilizzando l'operatore + =. Lento:

a += 'x' + 'y';

Più veloce:

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

Le operazioni primitive possono essere più veloci delle chiamate di funzione

Considerare l'utilizzo di operazioni primitive alternative rispetto alle chiamate di funzione in cicli e funzioni critici per le prestazioni. Lento:

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

Più veloce:

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

Maggiori informazioni su Best practice sulle prestazioni JavaScript


1

Se vuoi che gli utenti vedano entità html nel loro browser, usa 'html' invece di 'text' per iniettare una stringa Unicode, come:

$('p').html("Your Unicode string")

1

i miei due centesimi)

Di solito, lavorare con jquery significa che non devi preoccuparti degli elementi DOM sempre attuali. Puoi scrivere qualcosa del genere -$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')}) - e questo codice verrà eseguito senza generare errori.

In alcuni casi questo è utile, in alcuni casi - per niente, ma è un dato di fatto che jquery tende a essere, beh, a favore delle partite vuote. Ancora,replaceWith genererà un errore se si tenta di utilizzarlo con un elemento che non appartiene al documento. Lo trovo piuttosto intuitivo.

Un altro inconveniente è, a mio avviso, l'ordine dei nodi restituiti dal metodo prevAll () - $('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll(). Non è un grosso problema, in realtà, ma dovremmo tenere presente questo fatto.


0

Se prevedi di utilizzare Ajax in molti dati, ad esempio 1500 righe di una tabella con 20 colonne, non pensare nemmeno di utilizzare jQuery per inserire tali dati nel tuo HTML. Usa JavaScript semplice. jQuery sarà troppo lento su macchine più lente.

Inoltre, per metà del tempo jQuery farà cose che lo renderanno più lento, come cercare di analizzare i tag di script nell'HTML in arrivo e gestire le stranezze del browser. Se si desidera una velocità di inserimento rapida, attenersi a JavaScript semplice.


1
-1 La funzione .html () è veloce quanto l'approccio nativo
cllpse

tutti quelli che mi stanno sottovalutando ovviamente non hanno provato a inserire una tonnellata di DOM su IE e guardare le cose rallentare. Il motivo per cui jquery è lento è che non inserirà semplicemente il dom, ma farà alcune altre cose, come controllare se il dom ha degli script ed eseguirli se è in IE e alcune altre cose che non è necessario fare se si conosce esattamente che tipo di dati stai inserendo
mkoryak

1
Finché non devi preoccuparti delle perdite del browser e simili, .innerHTMLlo farà. Ma se stai costruendo qualcosa come Gmail in cui l'utente mantiene aperta la scheda per ore, dovrai solo mordere il proiettile e gestire la lentezza aggiuntiva. Per i curiosi, ecco esattamente cosa fa jQuery .html(): james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.html
adamJLev

-1

Utilizzo di jQuery in un piccolo progetto che può essere completato con solo un paio di righe di JavaScript ordinario.


Non mi dispiace essere modificato, ma per favore, argomenta la tua scelta.
morsa

8
-1 jQuery estrae un'API non funzionante. In questo modo sei sempre sicuro che il tuo codice funzioni. Supponi di aver scritto del codice usando jQuery e che alcuni bug casuali del browser vengano introdotti con una nuova versione: tutto ciò che devi fare è importare una versione aggiornata del framework jQuery. Contro dover capire da solo come risolvere il bug.
cllpse,

+1 mi sembra ragionevole - se stai usando solo poche righe, ha senso usare solo JS vaniglia.
alex,

1
@roosteronacid, il tuo argomento non ha senso. È molto improbabile che un browser introduca una regressione in uno script di minore complessità, o che affronti problemi crossbrowser per quella materia. Due anni fa ho lavorato con mootools e in determinate circostanze non è stato in grado di leggere un contenuto di elementi su Internet Explorer. Dopo alcune ore di prova per capire il problema, ho appena riscritto quella parte con js semplice. Quindi, in realtà è più probabile che jQuery si rompa piuttosto che javascript semplice fallisca a causa di un aggiornamento del browser. Mi risolverei un bug da solo ogni giorno piuttosto che hackerare un codice delle librerie.
morsa

3
couple of lines of ordinary JavaScriptCerto nessun problema. Ma quando mai è solo quello? Le persone che dicono "perché non usare vaniglia javascript ??" non sono ancora stato morso abbastanza duramente da IE ... e per non parlare di quanto codice cruft e boilerplate devi scrivere per fare cose semplici nella vecchia JS.
adamJev

-3

Non capire l'associazione di eventi. JavaScript e jQuery funzionano in modo diverso.

A grande richiesta, un esempio:

In jQuery:

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

Senza jQuery:

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

Fondamentalmente gli hook richiesti per JavaScript non sono più necessari. Vale a dire il markup inline (onClick, ecc.) Perché puoi semplicemente usare gli ID e le classi che uno sviluppatore normalmente sfrutterà per scopi CSS.


5
Ti interessa elaborare? Preferibilmente un esempio?
SolutionYogi

7
JavaScript non fornisce addEventListener () e attachEvent () per farlo?
alex,

2
separazione delle preoccupazioni, amico. Tieni separati HTML e JS
don
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.