jQuery多窗口访问和处理程序
jQuery Multi Window Access and Handlers
我正在开发一个非常依赖jQuery的web应用程序。我有一个结构为:
的select语句<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();
});
我想我的问题是为什么它不工作,除非我手动运行它一行一行通过控制台,我怎么解决这个问题?
问题是newtask是在父窗口中定义的,我不认为你可以从子窗口访问它,所以最好的解决方案是在add-task页面中预加载javascript事件。事件将略有不同:
$('#form').submit(function(){
window.close();
});
此代码片段应该已经包含在添加任务页面中。
我明白了。当我试图附加事件处理程序时,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();
实际工作。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数