我只是测试使用JavaScript与其他页面替换整个页面,我发现这个答案用document.write.至于为什么document.write,我需要使用同一页面替换整个HTML,包括脚本和样式.
它做我想要的但我似乎无法与我的事件处理程序保持一致.我的处理程序都附属于document使用:
$(document).delegate(...);
Run Code Online (Sandbox Code Playgroud)
目前,我有奇怪的结果.在我制作的小提琴中,它附加了一个处理程序.单击时,事件将触发,重写页面,再次运行该函数 - 但它不会附加处理程序.
但是在我的项目中,我正在执行相同的例程(d.w()然后添加处理程序).它确实重新连接一次并且处理程序工作,但在执行第二个例程(仍然在同一页面上)之后,它不再附加.
所以我的问题是:
d.w(),现有的处理程序是否会被删除document?window以及document随后的后同d.w()S' 或者他们以某种方式"更新"d.w()s 后运行?或者它们也会被删除?(以下适用于Google Chrome)
只有document清除,内存中的脚本仍然保持不变.您可以通过将某些内容设置为变量并在清除文档后查看是否存在来轻松地对其进行测试.open.
因此旧的本机处理程序从文档中丢失,但jQuery仍然认为处理程序存在于其自己的事件模型中.你可以通过编辑日志来看到它:
console.log('patch', JSON.stringify($.cache ));
Run Code Online (Sandbox Code Playgroud)
jQuery只为每个事件附加一个本机处理程序,所以如果你"click"注册了一个事件,那么document附加了jQuery的其他处理程序不会附加一个新的本机处理程序,而是将处理程序推送到jQuery内部处理程序数组中.
现在,因为document.open删除了本机处理程序,但是没有清除javascript,jQuery仍然认为本机处理程序存在,而且.delegate只进入jQuery内部处理程序数组.如果用普通的旧代替你的处理程序,document.onclick你会看到它开始工作.
你也可以继续使用jQuery,如果你在之前添加$(document).unbind()(或更强大$.cache = {};,但这是内部的并且可能会发生变化).delegate,以便再次同步jQuery.否则它不会,因为它不知道你打电话document.open.
所以:
document在a之后检查agaist来进行测试.open| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |