http://blog.csdn.net/youlianying/article/details/5468342
最近在做web项目,碰到需要跨页面传递参数的功能,就是那种需要把当前页面的内容带到新开的子窗体中,以前的做法是传一个id过去,然后在新窗口中去读数据库的内容。虽然不怎么麻烦,但是如果内容么有在数据库里保存,仅仅是处以拟稿状态时,就不能实现了,用户还常常认为是个bug。考虑采用get的方式传递,把需要的内容都序列化然后,通过url去传,显得很臃肿,而且get的传递内容长度有限制。于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法整了这么一个两者结合的方式,将form的target设置成和open的name参数一样的值,通过浏览器自动识别实现了将内容post到新窗口中。
比较有意思的是直接通过调用form的submit方法不能触发onsubmit事件,查看了帮助文档,必须手动的触发,否则只能看到页面刷新而没有打开新窗口。代码中只传递了一个参数内容,实际可传递多个。
具体代码如下:
function openPostWindow(url,name,data)
{
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);
return false;
}
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>
调用:
<A href="javascript:void(0);" onClick="openPostWindow('noWriteSiteInfo.jsp','noWriteSiteInfo','<%=lowerOffset %>');">
这里是调用;
</A>
注意红色部分 如果没有这个,会导致页面上<jsp:include page=""/> 这种页面丢失,这是 链接的href 和 onclick 共存问题,
请求的链接是用的 A 标签,A上同时写了href和onclick事件。对于链接 A 标签而言,当用户鼠标单击的时候,A对象被触发时会首先去执行onclick部分,然后是href。
解决方法就是:
直接把onclick事件写在href中:href="javascript:openPostWindow(。。。)"
还有一种解决方案:<a href="javascript:void(0)" onclick="do();return false;">Test</a>
这样是忽略了href部分,这对于通过onclick传递this,或者无法避开a对象时都有用。
以上方法还有一个问题,就是在IE浏览器可以运行,但是在FIREFOX中就会有问题。
通过以上代码中的红色部分,可以让firefox也正常。
修改后代码如下:
-
if(tempForm.attachEvent){
-
tempForm.attachEvent("onsubmit",function(){openWindow(name);});
-
} else {
-
tempForm.addEventListener("submit",function(){openWindow(name);},false);
-
}
-
document.body.a(tempForm);
-
if (tempForm.fireEvent) {
-
tempForm.fireEvent('onsubmit');
-
tempForm.submit();
-
} else if (document.create_rEvent) {
-
var ev = document.create_rEvent('HTMLEvents');
-
ev.initEvent('submit', false, true);
-
tempForm.dispatchEvent(ev);
- }
相关推荐
在上述描述中,提到的问题是在SSH框架下,URL长度受限且需要隐藏某些参数,因此需要寻找一种方式来通过POST传递参数。一种常见的解决方案是创建一个动态的表单,将数据放入隐藏的输入字段,然后模拟表单提交来实现...
通常,`window.open`配合GET方式传递参数,但也可以通过POST方式来实现更安全、更复杂的参数传递。本文将详细介绍如何使用`window.open`以POST方式传递参数,并提供一个示例代码。 首先,理解`window.open`的基本...
1. **使用URL参数**:在`window.open`的`url`中添加查询参数来传递数据。例如: ```javascript var url = "child.html?data=" + encodeURIComponent(value); var newWindow = window.open(url, "child"); ``` 2...
- 使用`window.open`时,数据交互需要通过其他方式实现,如使用`postMessage`API。 综上所述,`showModalDialog`和`window.open`各有优势和局限性,开发者应根据具体需求选择合适的方法。在现代Web开发中,由于`...
在网页开发中,`window.open` 是一个常用的 JavaScript 函数,用于在新的浏览器窗口中打开一个新的页面或 URL。然而,在一些交互场景下,比如子页面(由 `window.open` 创建的页面)需要与父页面(打开子页面的那个...
于是就想到用post的方式传递,问题在于open方法不能设置请求方式,一般网页的post都是通过form来实现的。如果仅仅模拟form的提交方式,那么open方法里那种可设置窗体属性的参数又不能用。最后想办法
window.open(url, name, features); ``` - `url`: 这是新窗口要加载的页面URL。 - `name`: 可选参数,用于指定新窗口的名称。可以是已存在的窗口的名称,如果是,则会重用该窗口;如果不存在,就会创建一个新的窗口...
综上所述,要在同一个标签页中使用 `window.open()` 或类似方法打开新的 URL,关键在于控制 `window.open()` 的 `name` 参数或者通过其他方式(如表单提交)来实现。当 `name` 参数与已存在的窗口或标签页匹配时,新...
`doPostBack`是ASP.NET中实现页面回发的关键工具,而在弹出窗体与父窗体间传递数据则需要利用各种JavaScript和ASP.NET的技术,包括URL参数、全局变量、Session/Cookie、`window.opener`以及HTML5的`postMessage`等...
1. **URL查询参数**:在打开新页面时,可以通过`url`参数传递数据。例如,在`opener.html`中: ```javascript var data = "这是要传递的数据"; var url = "open.html?" + encodeURIComponent(data); window....
在发送窗口(子窗口)中,使用`window.opener.postMessage(data, targetOrigin)`发送消息,其中`data`是你要传递的数据,`targetOrigin`是接收窗口的源。在接收窗口(父窗口)中,需要添加事件监听器: ```...
最后,关于标签“传值”,在Web开发中,数据传递通常有多种方式,如URL查询字符串、POST请求、localStorage、sessionStorage、cookies等。在EasyUI的弹窗场景中,我们主要关注的是通过查询字符串和JavaScript对象...
初始化请求是通过`open()`方法实现的,它接受三个参数:请求类型(如"GET"或"POST"),URL,以及一个布尔值表示是否异步执行。 ```javascript xhr.open('GET', 'http://example.com/data', true); ``` **二、设置...
在一些交互场景下,我们需要在弹出层中操作并获取相关参数,然后在关闭弹出层时传递这些参数给父页面进行处理。本文将详细介绍如何通过 `layer.open` 的回调函数来获取弹出层参数并进行后续操作。 首先,让我们来看...
4. **通信桥接**:在某些情况下,`window.opener` 可用于实现跨窗口的数据交换,尤其是在不支持跨文档消息传递(如 `postMessage` API)的旧浏览器中。 ### 注意事项 - 鉴于安全性和隐私考虑,现代浏览器可能会...
- 父窗口中,打开子窗口时保存一个引用,如`var childWindow = window.open(...)` - 然后在适当的时候,通过`childWindow`访问子窗口的变量或方法。 2. **使用window.postMessage API**: - HTML5引入了`window....
1. **通过`window.open()`方法传参**:在创建子窗口时,可以通过URL查询字符串传递参数。例如: ```javascript var childWindow = window.open('child.html?param1=value1¶m2=value2'); ``` 子窗口的...