2016-04-12 28 views
0

Olay işleyicileri bir önyükleme modalına bağlayan bazı kodlar var.jQuery .off seçicisi çalışmıyor

$("#learnMoreModal") 
     .off("show.bs.modal", learnMoreModalShow) 
     .on("show.bs.modal", learnMoreModalShow) 
     .off("hidden.bs.modal", learnMoreModalHidden) 
     .on("hidden.bs.modal", learnMoreModalHidden); 

Ama learnMoreModalShow ve learnMoreModalHidden iki defa yürütme: Bu olay işleyicileri iki kez çalıştırmak olmadığından emin olmak için .on() çağırmadan önce .off() çağırır yüzden bu kod iki kez aradı oluyor. Neden aramam .off()'a gitmiyor?

+1

Minimal kod örneğinizden açıkça anlaşılmıyor, ancak bunun yerine ['.one()'] (http://api.jquery.com/one/) kullanabilirsiniz? – Blazemonger

+0

Bence, * OP'nin sadece bir kez ateş etmesini istediğini söylüyor. Sadece bir olay işleyicisinin bağlandığından emin olmak istiyor. E.g., "HookUpMyEventHandlers" yöntemini X sayısını mümkün kıldığını söylüyor, ancak olay işleyicilerinin yalnızca bir kez bağlandığından emin olmak istiyor. (Sanırım söylediği şey). – aquinas

+0

@aquinas .one() için dokümanlar okuyorsanız, işleyiciden tek örnek alıyorsunuz, ancak her seferinde yeni bir tek örnek oluşturuyorsunuz. – mhodges

cevap

0

Eh, o dilsiz bir şeydi. Olaylarımı bağlayan işlev, belirli durumlarda iki kez çağrılabilir olsa da, aslında bu durumda değildi. JQuery kaynağına adım attım ve jQuery'yi .on()'a yapılan ilk çağrı sırasında 94'e bir kimlik atama yaptı ve sonra .off() numaralı telefon numarasının kimliği belirlenemedi. Bu, birisinin tüm .js dosyasına ikinci bir referans eklemiş olduğunu bulmamı sağladı, böylece her şey iki kez koşuyordu ... sadece olayları toplayan işlev değil.

Yani yanıt: .off() yukarıda yazıldığı gibi düzgün çalışıyor. İşleyici yine de çalışıyorsa, kullanılan işleyici işlevinin birden çok örneğine veya .off tamamlandıktan sonra başka bir yere işleyiciyi ekleyen başka bir kodunuz olabilir.

1

Belki

.unbind() jquery

işlevini kullanarak bakmak gerekir. Tıklama olaylarını yeniden tanımlamam gerektiğinde kullanıyorum, böylece birden fazla işlev yürütmeyecekler. Korktuğum olarak

http://api.jquery.com/unbind/

+0

Alternatif için teşekkürler. JQuery 1.11 kullanıyorum, bu yüzden 'off()' doc'a göre tercih edilen yol olacaktır. – xr280xr