Eyni funksiyanı yerinə yetirmək üçün JQuery birdən çox hadisəni

Eyni funksiyanı eyni xəttdə zəng edən hadisələr, keyup , keyup , keyup etmək və change üçün bir yol varmı və ya bunları ayrı-ayrılıqda etmək lazımdırmı?

Problem, mən db axtarışından istifadə edərək bəzi məlumatları yoxlamaq lazımdır və mən hava səbəbindən çekin buraxılmaması, sahəyə yazılmış və ya yerləşdirilməsinin mümkün olmadığını əmin etmək istəyirəm.

718
28 марта '10 в 21:53 2010-03-28 21:53 Mart ayının 28-də saat 11: 00-da başlayacaq
@ 9 cavab

Bir funksiyanı bir neçə tədbirə bağlamaq üçün .on() funksiyasından istifadə edə bilərsiniz:

 $('#element').on('keyup keypress blur change', function(e) { // e.type is the type of event fired }); 

Yoxsa funksiyanı hadisənin normal funksiyalarına bir parametrə kimi keçir.

 var myFunction = function() { ... } $('#element') .keyup(myFunction) .keypress(myFunction) .blur(myFunction) .change(myFunction) 
1300
28 марта '10 в 21:56 2010-03-28 21:56 Cavab Tatu Ulmanen tərəfindən 28 Mart 2010-da saat 21:56 'də verildi. 2010-03-28 21:56

JQuery 1.7-də olduğu kimi, .on() metodu bir sənədə hadisə işleyicilerinin bağlanması üçün üstünlük təşkil edir. Əvvəlki versiyalar üçün, .bind() metodu bir hadisə işleyicisini birbaşa elementlərə bağlamaq üçün istifadə olunur.

border=0
 $(document).on('mouseover mouseout',".brand", function () { $(".star").toggleClass("hovered"); }) 
45
14 нояб. Lesik tərəfindən verilmiş cavab 14 noyabr. 2012-11-14 11:14 '12 at 11:14 2012-11-14 11:14

JQuery bir dəfədən çox hadisəni dinlədiyində və Google məni buraya qoyduğunda hadisə növü almaq üçün bir yol axtarırdıq.

Belə ki, maraqlı olanlar üçün event.type mənim cavabıdır:

 $('#element').on('keyup keypress blur change', function(event) { alert(event.type); // keyup OR keypress OR blur OR change }); 

Daha ətraflı məlumat jQuery doc .

28
15 мая '13 в 1:00 2013-05-15 01:00 Alain Tiemblo'ya 15 may '13 'də saat 01:00' da cavab verin 2013-05-15 01:00

Birdən çox hadisəyə bir funksiya əlavə etmək üçün bağlama metodundan istifadə edə bilərsiniz. Yalnız bu kodda olduğu kimi hadisə adları və işləyicilər funksiyasını verin:

 $('#foo').bind('mouseenter mouseleave', function() { $(this).toggleClass('entered'); }); 

Başqa bir seçim isə jquery api zənciri dəstəyindən istifadə etməkdir.

19
28 марта '10 в 21:55 2010-03-28 21:55 Cavab Giorgi tərəfindən 28 Mart 'da 10 saat 21:55' də verildi. 2010-03-28 21:55

Eyni hadisə işleyicisini bir neçə hadisə ilə əlaqələndirirsinizsə, tez-tez eyni zamanda bir neçə işlə məşğul olma probleminiz olur (məsələn, bir düyməni basaraq bir düyməyə basaraq, dəyişdirən və bulanıklaşan bir yanğın ola bilər).

Həqiqətən istədiyiniz kimi səslənir:

 $('#ValidatedInput').keydown(function(evt) { // If enter is pressed if (evt.keyCode === 13) { evt.preventDefault(); // If changes have been made to the input value, // blur() will result in a change event being fired. this.blur(); } }); $('#ValidatedInput').change(function(evt) { var valueToValidate = this.value; // Your validation callback/logic here. }); 
12
28 марта '10 в 22:33 2010-03-28 22:33 Cavab Deyv Ward tərəfindən 28 Mart '10' da 22:33 'də verildi 2010-03-28 22:33

Yenidən istifadə etmək istədiyiniz funksiyanı təyin edə bilərsiniz:

 var foo = function() {...} 

Daha sonra, obyektinizin bu funksiyanı zəng etmək üçün istədiyiniz bir neçə hadisə dinləyicisi təyin edə bilərsiniz ('hadisə'), aralarında boşluq qoyaraq aşağıda göstərildiyi kimi:

 $('#selector').on('keyup keypress blur change paste cut', foo); 
9
08 апр. Cavab 08 aprel Galaxy tərəfindən Coder tərəfindən verilir 2015-04-08 20:51 '15 at 20:51 2015-04-08 20:51

Bunu necə edirəm.

  $("input[name='title']").on({ "change keyup": function(e){ var slug = $(this).val().split(" ").join("-").toLowerCase(); $("input[name='slug']").val(slug); }, }); 
6
09 нояб. Cavab Səccad Əşrəf tərəfindən 09 noyabr. 2014-11-09 15:46 '14 də 15:46 2014-11-09 15:46

Tatu'nun cavabı bu necə intuitiv bir şəkildə olacaq, ancaq bu .on() vasitəsilə edilsə də, Internet Explorer-da yuva / bağlama hadisələrinin bu yolu ilə bəzi problemlərim var.

JQuery-in hansı versiyasının problem olduğunu tam olaraq müəyyən edə bilmədi. Amma bəzən aşağıdakı versiyalarda bir problem görürəm:

  • 2.0.2
  • 1.10.1
  • 1.6.4
  • Mobil 1.3.0b1
  • Mobil 1.4.2
  • Mobil 1.2.0

Mənim həll müddətim əvvəlcə funksiyanı təyin etmək idi

 function myFunction() { ... } 

hadisələri tək-tək idarə edirlər

 // Call individually due to IE not handling binds properly $(window).on("scroll", myFunction); $(window).on("resize", myFunction); 

Bu ən xoş bir həll deyil, amma bu mənim üçün işləyir və düşündüm ki, bu problemi həll edə biləcək başqalarına kömək etmək üçün orada yerləşdirdim.

4
07 апр. Cavab Apr 07 2015-04-07 11:57 '15 at 11:57 2015-04-07 11:57

" keyup , keyup , blur və hadisələrin change bir yolda eyni funksiyanı keyup üçün bir yol varmı?"

Aşağıdakı strukturu aparan .on() funksiyasından istifadə edə bilərsiniz: .on( events [, selector ] [, data ], handler ) , belə ki, bu metodu bir neçə tədbirdən keçə bilərsiniz. Sizin vəziyyətinizdə belə olmalıdır:

 $('#target').on('keyup keypress blur change', function(e) { // "e" is an event, you can detect the type of event using "e.type" }); 

Və burada canlı bir nümunədir:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input id="target"> 
1
26 сент. Cavab 26 Sentyabr Ticarət intiharına verildi 2017-09-26 22:16 '17 saat 10:16 'da 2017-09-26 22:16

tags bağlı digər suallar və ya bir sual