,弹出的DOM元素的jQuery操纵

问题描述:

我创建一个弹出如下:,弹出的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

测试,在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