window.open以post方式将内容提交到新窗口


Posted in Javascript onDecember 26, 2012

第一种方式
最近在做web项目,碰到需要跨页面传递参数的功能,就是那种需要把当前页面的内容带到新开的子窗体中,以前的做法是传一个id过去,然后在新窗口中去读数据库的内容。虽然不怎么麻烦,但是如果内容么有在数据库里保存,仅仅是处以拟稿状态时,就不能实现了,用户还常常认为是个bug。考虑采用get的方式传递,把需要的内容都序列化然后,通过url去传,显得很臃肿,而且get的传递内容长度有限制。于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法整了这么一个两者结合的方式,将form的target设置成和open的name参数一样的值,通过浏览器自动识别实现了将内容post到新窗口中。

比较有意思的是直接通过调用form的submit方法不能触发onsubmit事件,查看了帮助文档,必须手动的触发,否则只能看到页面刷新而没有打开新窗口。代码中只传递了一个参数内容,实际可传递多个。
具体代码如下:

<script> 
function openPostWindow(url, data, name) 
{ 
var tempForm = document.createElement("form"); 
tempForm.id="tempForm1"; 
tempForm.method="post"; 
tempForm.action=url; 
tempForm.target=name; 
var hideInput = document.createElement("input"); 
hideInput.type="hidden"; 
hideInput.name= "content" 
hideInput.value= data; 
tempForm.appendChild(hideInput); 
tempForm.attachEvent("onsubmit",function(){ openWindow(name); }); 
document.body.appendChild(tempForm); 
tempForm.fireEvent("onsubmit"); 
tempForm.submit(); 
document.body.removeChild(tempForm); 
} 
function openWindow(name) 
{ 
window.open('about:blank',name,'height=400, width=400, top=0, left=0, toolbar=yes, menubar=yes, scrollbars=yes, resizable=yes,location=yes, status=yes'); 
} 
</script>

第二种方式
function openWindowWithPost(url,name,keys,values) 
{ 
var newWindow = window.open(url, name); 
if (!newWindow) 
return false; 
var html = ""; 
html += "<html><head></head><body><form id='formid' method='post' action='" + url + "'>"; 
if (keys && values) 
{ 
html += "<input type='hidden' name='" + keys + "' value='" + values + "'/>"; 
} 
html += "</form><script type='text/javascript'>document.getElementById('formid').submit();"; 
html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, ""); 
newWindow.document.write(html); 
return newWindow; 
}

推荐使用第一种方式,第二种方式测试过程中发现,与日历弹出框冲突,如果子页面上有日历弹出框,则点日历框会不停刷新页面,不会弹出日历框。当然,也可能是我用的日历框的问题。
Javascript 相关文章推荐
js 数组操作代码集锦
Apr 28 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
Jul 31 Javascript
js中的for如何实现foreach中的遍历
May 31 Javascript
原生js和jQuery写的网页选项卡特效对比
Apr 27 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
轻松实现js选项卡切换效果
Sep 24 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
Oct 31 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
浅谈react.js中实现tab吸顶效果的问题
Sep 06 Javascript
使用cropper.js裁剪头像的实例代码
Sep 29 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
JavaScript定时器设置、使用与倒计时案例详解
Jul 08 Javascript
JavaScript中json对象和string对象之间相互转化
Dec 26 #Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 #Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 #Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 #Javascript
Javascript图像处理思路及实现代码
Dec 25 #Javascript
javascript的offset、client、scroll使用方法详解
Dec 25 #Javascript
JS解析json数据并将json字符串转化为数组的实现方法
Dec 25 #Javascript
You might like
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
layui使用数据表格实现购物车功能
2019/07/26 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
Python群发邮件实例代码
2014/01/03 Python
django框架自定义用户表操作示例
2018/08/07 Python
详解django自定义中间件处理
2018/11/21 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
python里glob模块知识点总结
2021/01/05 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
历史学专业推荐信
2013/11/06 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
12岁生日感言
2014/01/21 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
出纳员的岗位职责
2014/02/22 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
考试作弊检讨书范文
2015/01/27 职场文书
个人工作保证书
2015/02/28 职场文书
2015年话务员工作总结
2015/04/29 职场文书
史上最牛辞职信
2015/05/13 职场文书
总经理致辞
2015/07/29 职场文书