2011-05-12 112 views
4

我創建一個彈出如下:,彈出的DOM元素的jQuery操縱

var comet = { 

     popup: null, 

     newPopup: function(windowsname, w, h){ 
      this.popup = window.open(windowsname, windowsname, 'width=' + w + ',height=' + h); 
      var self = comet; 
      var logOut= null; 
      $(this.popup.document).ready(function(){ 
       logOut = self.popup.document.getElementById('logout'); 
       console.log(logOut); 
       $(logOut).live('click', function(){ 
        alert('HELLO'); 
        return false; 
       }) 
      }) 
     }, 

     some_function: function(){ 
      //calling it here: 
      this.newPopup('index.php',1120,550); 
     } 
    } 

logOut有時(通常是開放的第一窗口)返回null。此外,點擊處理程序永遠不會通過,並且原始點擊處理程序運行。

如何覆蓋彈出窗口的實際點擊處理程序?
這兩個網頁上我的網站,所以應該不存在跨站點的問題..

這裏是一個小提琴,顯示了一點什麼,我試圖做的:http://jsfiddle.net/maniator/K2B3q/

+0

@Matt,對不起,添加到我的問題。 'comet'是對象名稱 – Neal 2011-05-12 21:10:02

+0

爲什麼不包括你想在彈出的index.php文件本身的彈出頁面上操作的JS,而不是在主文檔中? – maxedison 2011-05-12 21:11:50

+0

@maxedison,我想讓主頁面(創建彈出窗口)知道'logOut'被點擊了 – Neal 2011-05-12 21:12:40

回答

1

測試,在Firefox 4個工作和Chrome 11. Check it out.

$(function() 
{ 
    var comet = 
    { 
     popup: null, 
     newPopup: function(url, w, h) 
     { 
      this.popup = window.open(url, url, 'width=' + w + ',height=' + h); 
      var self = this; 

      this.popup.onload = function() 
      { 
       var doc = this.document, 
        script = doc.createElement('script'); 
       script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js'; 
       script.onload = function() 
       { 
        function setup() 
        { 
         $('#logout').click(function() { alert('It worked!'); }); 
        } 

        script = doc.createElement('script'); 
        script.textContent = "(" + setup.toString() + ")();"; 
        doc.body.appendChild(script); 
       }; 

       doc.head.appendChild(script); 
      }; 
     }, 

     foo: function() 
     { 
      this.newPopup('http://jsbin.com/amuza3/2', 600, 400); 
     } 
    }; 

    $('#clickme').click(function() 
    { 
     comet.foo(); 
    }); 
}); 
+0

@MattBall,是的,但元素**應該在那裏。尤其是在彈出加載時,不是嗎? – Neal 2011-05-12 22:01:26

+1

並將其更改爲普通的「點擊」,但它仍然不起作用 – Neal 2011-05-12 22:01:53

+1

@MattBall,讓我知道你什麼時候有東西.... – Neal 2011-05-12 22:04:39