2013-06-13 16 views
8

Takvimde var ve bir <td>'u tıklattığımda, seçtiğiniz tarih için düzleminizi oluşturabilmeniz için bir açılır pencere belirir. Bir özellik eklemek istiyorum.Çocuk penceresinden ana pencerenin JavaScriptini çağırın

Kullanıcı olayı oluşturmayı bitirdiğinde, ana sayfaya bir JavaScript isteği göndermek istiyorum, böylece AJAX kullanarak takvimi yenileyebilirim. Temel olarak, çocuktan bir işlev çağırmak istiyorum, ancak işlev ana sayfada.

Google'da, yalnızca üst pencereyi yenileyebilen bir komut dosyası buldum. Even Mümkün mü?

P.S. Cevap saf JS veya jQuery olabilir, önemli değil. Bu arada bakmaya devam edeceğim.

+0

@Neal David, aramalarının eksiksiz olması durumunda makul bir çaba gerektirdiğini düşündüğüm "ana geri arama" gibi şeyler için Google'da arama yaptığını söyledi. Anlatabildiğim kadarıyla, David'in bir takvimi güncellemek ve görüntülemek için eksiksiz bir kod istemediğini unutmayın. Pencerenin penceresindeki bir işlevi çağırmak için bir pop-up penceresinin genel bir yolunu soruyor. –

+0

Bu, çok fazla atılan çok geçerli bir sorudur, neden reddedildiğini bilmiyorum. Gelen tarayıcı sürümlerinde javascript'in pencere platformuyla daha derin bir düzeyde etkileşime girebileceğini görebiliyorum. – OneChillDude

+0

Bu soruyu savunduğunuz için ikinize de teşekkürler. Ben sadece "nasıl yapılır" diye soruyorum ama kod gerekmiyor ... Ve evet, bazı araştırmalar yaptım ve tüm bulduğum ana pencerenin ne kadar refrech olduğudur. Hiçbir şey bulamadım. Şimdi, gelecekte bu sorunun Google'da en iyi arama olabileceğini ve ihtiyaç duyulan daha fazla kişiye yardımcı olabileceğini umuyorum. –

cevap

13

Aradığınız şey, açılır pencereyi açan window referansıdır. Bunu yaptıktan sonra, o pencerede işlevleri çağırabilir, o pencerede değişkenleri okuyabilir ve yazabilir, hatta DOM’unu bile değiştirebilirsiniz. Bu başvuru opener olarak adlandırılır. Geçerli pencereyi açan pencere için window nesnesini verir. Böyle orijinal pencerede bir işlev varsa, örneğin,:

function updateMe(data) { 
    alert(data); 
} 

sonra açılan pencerede böyle diyebiliriz:

opener.updateMe('Hello!'); 

Doğal olarak, emin olmak gerekir updateMe() orijinal sayfada global bir işlevdir. Veya orijinal sayfada bir nesneniz varsa ve updateMe() bu nesnenin bir metoduysa, nesne global olduğu sürece bunu yapabilirsiniz. Örneğin. konak sayfasında:

var myObject = { 
    updateMe: function(data) { 
     alert(data); 
    } 
}; 

sonra açılan pencerede bunu yapabilirsiniz:

opener.myObject.updateMe('Hello!'); 

Temelde, sürece ardından, window.whatever ile orijinal sayfadan nesneye veya işleve alabilir gibi açılırsa bunu opener.whatever olarak değiştirebilirsiniz.

+1

MDN’ler [window.opener' için belgeler] (https://developer.mozilla.org/en-US/docs/Web/API/window.opener) –

+0

Teşekkürler. Gördüğümden, aradığım şey bu. Yarın işte deneyeceğim! –

+0

Bir çekicilik gibi çalışır! Çok teşekkür ederim, bugün bir şey öğreniyorum! –

İlgili konular