.live () vs .bind ()

Noriu žinoti pagrindinį skirtumą tarp

.live() vs .bind()

jQuery.

51
22 апр. nustatė Pranay Rana , balandžio 22 d 2010-04-22 14:36 '10, 14:36 ​​PM 2010-04-22 14:36
@ 4 atsakymai

Pagrindinis skirtumas yra tas, kad live veiks elementams, kurie bus sukurti po puslapio įkėlimo (t. Y. Naudojant „JavaScript“ kodą), o bind tik susieja įvykių susiejimus su esamais elementais.

 // BIND example $('div').bind('mouseover', doSomething); // this new div WILL NOT HAVE mouseover event handler registered $('<div/>').appendTo('div:last'); // LIVE example $('div').live('mouseover', doSomething); // this new appended div WILL HAVE mouseover event handler registered $('<div/>').appendTo('div:last'); 

Atnaujinti:

JQuery 1.7 yra negrąžinamas live() metodas, o 1.9. Jei norite pasiekti tą patį funkcionalumą su 1.9+, turite naudoti naują on() metodą, kuris turi šiek tiek kitokią sintaksę, kurią jis vadina dokumento objektu, ir selektorius perduodamas kaip parametras. Todėl kodas iš viršaus konvertuojamas į šį naują privalomųjų įvykių būdą, atrodys taip:

 // ON example $(document).on('mouseover', 'div', doSomething); // this new appended div WILL HAVE mouseover event handler registered $('<div/>').appendTo('div:last'); 
92
22 апр. Atsakymas, kurį pateikė RaYell balandžio 22 d 2010-04-22 14:38 '10, 14:38, 2010-04-22 14:38

Statistinę „ .bind() ir .live() vs .delegate() naudoju FF profileriu. Kiekvieną kartą aš turėjau 10 raundų (nepakankamas mėginys, kad būtų galutinis, bet iliustruoja tašką). Tai yra rezultatai.

1) vienas statinis elementas su identifikatoriumi, kuris naudoja paspaudimo įvykį:

 .bind(): Mean = 1.139ms, Variance = 0.1276ms .live(): Mean = 1.344ms, Variance = 0.2403ms .delegate(): Mean = 1.290ms, Variance = 0.4417ms 

2) keli statiniai elementai, turintys bendrą klasę, naudojant paspaudimo įvykį:

 .bind(): Mean = 1.089ms, Variance = 0.1202ms .live(): Mean = 1.559ms, Variance = 0.1777ms .delegate(): Mean = 1.397ms, Variance = 0.3146ms 

3) Keli dinaminiai elementai (pirmasis mygtukas sukuria antrąjį ...) naudojant paspaudimo įvykį:

 .bind(): Mean = 2.4205ms, Variance = 0.7736ms .live(): Mean = 2.3667ms, Variance = 0.7667ms .delegate(): Mean = 2.1901ms, Variance = 0.2838ms 

Interpretuokite, kaip norite, bet man atrodo, kad dinaminiai elementai, esantys puslapio padidinime, .delegate (), atrodo, turi geresnių rezultatų, o statiniai elementai geriausiai veikia .bind ().

Atminkite, kad naudoju labai paprastą paspaudimo įvykį, kuris sukelia įspėjimą. Skirtingi puslapiai, turintys skirtingą aplinką (t. Y. Procesoriai, daugiakartės naršymas, dabartiniai srautai ir tt), sukurs skirtingus rezultatus. Šį sprendimą naudoju kaip pagrindinį mano sprendimo naudoti vieną ar kitą vadovą. Prašome pranešti, jei pateikiate kitą rezultatą.

Ačiū!

27
07 окт. Atsakyti į Watermark Studios spalis 07. 2011-10-07 23:39 '11, 11:39, 2011-10-07 23:39

Jei įmanoma, turėtumėte naudoti .delegate() vietoj .live() . Kadangi įvykio delegacija .live() visuomet .live() nukreipta į kūną / dokumentą, „burbulą“ galite apriboti .delegate() .

Žr. Http://api.jquery.com

UPDATE

Nuo jQuery :

Kaip ir jQuery 1.7, .delegate() buvo pakeistas .delegate() .on() metodu. Tačiau ankstesnėms versijoms .delegate() išlieka veiksmingiausia priemonė naudoti įvykių delegavimą.

18
22 апр. atsakymą pateikė jAndy balandžio 22 2010-04-22 14:46 '10, 2:46 PM 2010-04-22 14:46

Kadangi v1.7, .live, .bind ir .delegate visi buvo pakeisti .on http://api.jquery.com/on/

Man buvo įdomu sužinoti apie save, todėl parašiau straipsnį su kai kuriais kodo pavyzdžiais. http://blog.tivix.com/2012/06/29/jquery-event-binding-methods/ .

Atrodo, kad priklausomai nuo to, kaip jūs skambinate .on (), jquery imituoja .bind, .live arba .delegate. Tai suteikia jūsų renginių tvarkytojams elegantiškesnį įgyvendinimą.

10
03 июля '12 в 19:48 2012-07-03 19:48 atsakymą pateikė andyzinsser liepos 03 '12, 19:48 2012-07-03 19:48

Žr. Kitus klausimus apie „ prijungti „ žymes arba Užduokite klausimą