Ben window.top.document için bir etkinlik gönderme çalışıyorum Frame1 içindedispatchEvent(), geçme yerine işlevini yürütür o
kodu olarak:
function callingBell(){
alert('ding dong');
}
var event = window.top.document.createEvent("CustomEvent");
event.initCustomEvent('READY', false, false, { 'bell': callingBell });
window.top.document.dispatchEvent(event);
yılında frame2:
window.top.document.addEventListener('BOMREADY', function(e) {
bell= e.detail.bell;
}, false);
Detaylar: bir ebeveyn jsp var. Ebeveyn jsp içinde 2 çocuk jspsim var. Senaryo ilk kez iyi çalışıyor. Ebeveyn çerçevesi yenilenmezken iki çocuk jspsini yenilediğimde/yeniden yüklediğimde, yukarıdaki sorun oluşur. Uyarı "ding dong" görüntülenme sayısı, tam olarak çocuk karelerini yenilememe sayısıdır. Anlamı: 7. yenilemede, uyarı 7 kez görüntülenir. Window.top.document içinde bir şeyden şüpheleniyorum, dinleyiciye iletmeden önce işlevi yürütmek için.
İkinci yenileme sonrasında, yürütme "window.top.document.dispatchEvent (event)" öğesine ulaştığında, önce hedef dinleyiciye girmek yerine, callBell işlevi çağrılır ve yürütme dinleyiciye ulaşmadan önce uyarı görüntülenir kodu.
Ayrıca, eğer callBell bir işlev değilse, dinleyici beklendiği gibi bir kez çağrılır.
GÜNCELLEME: Ben sonrası için dinleyici gerekiyor gibi nihai bir çözüm olarak bunu yapamaz,
e.target.removeEventListener('READY', arguments.callee, false);
ama: ben sadece kullanarak addEventListener içindeki olay dinleyicisi kaldırarak bu sorunu çözebilir Etkinlik.
Wich tarayıcı kullanıyor musunuz? –
Chrome ... Bu, tüm tarayıcılarda tekrarlanabilir – stackMan10
Yinelenen, çocuğun her yenilendiğinde eklenmesidir. Geri arama işlevini adlandırılmış bir işlev yaparsanız, eklemeden önce dinleyiciyi her zaman çıkarabilirsiniz. – Stoffe