2013-03-16 26 views
0

我正在研究一个依赖于jQuery的Web应用程序。我有一个选择的结构类似:jQuery多窗口访问和处理程序

<select id='task_id'> 
    <option value=''>Select</option> 
    <option value='0001'>First Task</option> 
    <option value='0002'>Second Task</option> 
    <option value='addnew'>Add New...</option> 
</select> 

而且我也有一些jQuery的打开一个新的窗口时,有人选择“添加新...”,这样他们就可以在另一页上输入详细信息。

var newTask; 
$("select").change(function(){ 
    if($(this).val() == "addnew"){   
     if(newTask) 
      newTask.close(); 
     newTask = window.open("/projects/add-task", "newTask", "width=990,height=600"); 
    } else { 
     if(newTask) 
      newTask.close(); 
    } 

我想从父窗口的形式添加事件处理程序提交的子窗口中的按钮,这样,当有人提出(即它们添加完)形式,该窗口将关闭。我有什么是这样的:

$("form", newTask.document).submit(function(){ 
     newTask.close(); 
    }); 
}); 

就其本身而言,它不起作用,但它不会产生任何错误。如果我打开了Chrome检查,并运行下面,一行行,其行为略有不同:

1. var newWin = window.open("/projects/new"); 

2. $("form", newWin.document).submit(function(){ 
     newWin.close(); 
    }); 

我想我的问题是为什么没有工作,除非我手动通过运行一行行控制台,我该如何解决这个问题?

回答

0

问题是,在父窗口中定义了newtask,我不认为你可以从子窗口访问它,所以最好的解决方案是预加载你的JavaScript事件在添加任务页。事件会略有不同:

$('#form').submit(function(){ 
    window.close(); 
}); 

此代码片段应该已经包含在您的添加任务页面中。 我希望这是有用的。

+0

我不是试图从孩子的父窗口访问,但反过来。我知道我可以做到这一点,因为我已经用Inspector手动完成了它,但是当我尝试使用脚本时,它不起作用。我认为这与DOM尚未加载到子窗口上有关。 – Goldentoa11 2013-03-16 19:21:32

0

我已经想通了。当我尝试附加事件处理程序时,这是DOM未完全加载的问题。

if(newTask) 
    newTask.onload = function(){ 
    $("input[type=submit]", newTask.document).click(function(){ 
     newTask.close(); 
    }); 
    }; 

接下来的问题是我将如何“jQuery-ify”?我不喜欢使用“el.onload”,但我似乎无法使

$(newTask.document).ready(); 

$(document, newTask).ready(); 

任何变化的实际工作。