Soru Ne zaman javascript olayları pencere ve belge vs document.body üzerinde gözlemlemeliyim?


Web uygulamam için prototype.js kullanıyorum ve krom, safari ve firefox üzerinde çalışan her şeye sahibim. Şimdi IE8 uyumluluğu üzerinde çalışıyorum.

IE'de hata ayıklama yaparken, daha önce pencere üzerinde bir gözlemci belirlediğim javascript olaylarının olduğunu fark ettim.

Event.observe(window, eventType, function () {...});

(nerede eventType olabilir "dom:loaded", "keypress"vb.) ve Chrome / Safari / Firefox'ta gayet iyi çalışıyor. Ancak, IE'de gözlemci asla ateş etmez.

En azından bazı durumlarda, bunu gözlemci yerine başka bir şeye yerleştirmek için IE üzerinde çalışabilirim. window, Örneğin. document (bu durumuda "dom:loaded") veya document.body (bu durumuda "keypress"). Ancak, bu tüm deneme-yanılmadır.

Bu gözlemleyicilerin nereye yerleştirileceğini belirlemek için, sonuçların çapraz tarayıcı uyumlu olacağı şekilde daha sistematik bir yol var mı?

Teşekkürler!


21
2018-04-16 19:24


Menşei




Cevaplar:


Çeşitli tarayıcıların nesne belgeleri (ör. window MSDN'de document MDC'de nesne üzerinde hangi olayların desteklendiğini tanımlar. Oradan başlayabilirsin.


1
2018-04-16 19:40



Dokümanlar bunu açıklamak için özellikle iyi bir iş yapmıyor. - Diodeus - James MacFarlane
Bu, bakmak için iyi bir yer gibi görünüyor, ancak MSDN’nin kapsamlı olmadığını anladığım kadarıyla. Örneğin, bir kayıt olabilir onresize olaydaki windowama aslında orada listelenmemiş. - brahn
O yüzden onresize tarafından maruz window.prototype IE'de. Dokümanda. - Alsciende
Ah-ha! window.prototype Teşekkürler Alsciende. - brahn


(Bu çok kapsamlı bir cevap değildir, ancak ampirik olarak çalışmaktadır - bu yüzden umarım ki bu kurallar başkalarına yardımcı olacaktır.)

  • Genel olarak, olayları kaydet document, değil window. Webkit ve mozilla tarayıcıları da memnun görünüyor, ancak IE pencereye kaydedilen çoğu etkinliğe cevap vermiyor, dolayısıyla document IE ile çalışmak

  • İstisna: resizeve yükleme, boşaltma ve açma / kapama ile ilgili olaylar tüm pencerede ayarlanmalıdır.

  • İlk istisna dışında istisna: dom:loaded açık olmalı document IE'de.

  • Başka bir istisna: Mozilla'nın altındaki tuş vuruşlarını, siz yazarken bul seçeneği etkinken algılarken, temel etkinlik gözlemcilerinizi window, değil document. Eğer ikincisini yaparsanız, bul-as-type türü olayı engelliyor gibi görünüyor.


28
2018-04-19 21:59



Bu soruyla ilgili herhangi bir güncelleme var mı? - Augustin Riedinger
Firefox Quantum'da, "yazmaya başladığınızda metni ara" seçeneğini etkinleştirirseniz, window.addEventListener('keyup', handler) Ayrıca çalışmaz. - thdoan