IE8'de özel bir olayı tetiklemeye ve here ve here'dan bir çözümü birlikte çözmeye çalışıyorum. Ama ben onu çalışamıyorum ...IE8'de özel bir javascript olayı nasıl tetiklenir?
requireJS ve google analytics ile jquery mobile kullanıyorum. Bu yüzden JQM pageshow
olayını izliyorum. Ancak requireJS komut dosyalarının zaman uyumsuzluğunu yüklediğinden, sayfalar arası bağlantımın javascript "sarıcı" dosyasında yapılması gerekir, aksi halde bir hata üretilir, çünkü ne jquery ne de jquery mobile snippet'in ayrıştırıldığı zaman yüklenir. Yani
Her sayfanın sonunda bu da dahil olmak üzere yapıyorum: algılandı zaman
if (document.addEventListener) {
document.addEventListener("jqmReady",function(){trigAnalytics("jqmReady");alert("FF detected")},false);
} else if (document.attachEvent) {
document.attachEvent("jqmReady", function(){trigAnalytics("jqmReady");alert("IE detected")});
}
Ve, benim analitik kovuyorum pageshow bağlayıcı pasaj: Yani
var trigAnalytics = function(trigger){
$(document).on('pageshow','div:jqmData(role="page").basePage', function (event, ui) {
var url = location.href;
try {
hash = location.hash;
if (hash && hash.length > 1) {
_gaq.push(['_trackPageview', hash.substr(1)]);
_gaq.push(['_setCustomVar', 1, 'id_external', ########, 1 ]);
} else {
_gaq.push(['_trackPageview', url]);
_gaq.push(['_setCustomVar', 1, 'id_external', ########, , 1 ]);
_gaq.push(['b._trackPageview', url]);
}
} catch(err) { }
});
if (typeof _gaq !== "undefined" && _gaq !== null) {
$(document).ajaxSend(function(event, xhr, settings){
_gaq.push(['_trackPageview', settings.url]);
_gaq.push(['b._trackPageview', settings.url]);
});
}
};
için Olay zincirinin tekme, JQM hazır olduğunda jqmReady
'u tetiklemem gerekiyor. JQM, sadece bunu belirtmek için mobileinit
olayını kullanır. Yani benim uygulama denetleyicisi init içinde ben şöyle kendisine bağlanmasını ediyorum:
mobileinit
tetikleyiciler, jquery kullanılabilir olduğunda çünkü sadece, $ (pencere) .trigger ('jqmReady') tetikleme denedi
$(document).bind("mobileinit", function() {
// non-IE OK
if (document.createEvent) {
evt = document.createEvent("Event");
evt.initEvent("jqmReady", true, true);
document.dispatchEvent(evt);
} else if (document.createEventObject) {
// MSIE (NOT WORKING)
document.documentElement.evt = 0; // an expando property
document.documentElement.attachEvent("jqmReady", function() {
document.documentElement.evt = document.documentElement.evt + 1;
});
}
});
. Ancak, addEventListener
'da oluşturulan olaylar bu şekilde tetiklenemiyor gibi görünüyor, bu yüzden IE'de özel bir olayı tetiklemek için yalnızca javascript çözümüne ihtiyacım var.
Soru:
Birisi bana IE8 için bir javascript özel etkinliği doğru tetiklemek için nasıl bir işaretçi verebilir misiniz? nasıl çalıştığını
neden o tetiği yerleştirmeyin $ (belge) .ready()? Buna neden ihtiyacın var? –
Bu kod çalıştırıldığında 'jquery' ~ $ (document) .ready() kullanılamayacaktır. Snippet, requireJS başlatıldıktan hemen sonra sayfadadır. Yani (1) sayfası ayrıştırılır, (2) requireJS tetikleyicileri, (3) snippet'im yürütülür.Ne zaman, ne "jquery" veya "jquery-mobile" tam olarak yüklenir. Yani, sadece javascript olmalı. – frequent
Sorunuzu takip ettiğimden emin değilim (bu nedenle cevap değil) ancak ['dispatchEvent()'] (https://developer.mozilla.org/en-US/docs/DOM/element.dispatchEvent) alaka? –