js快顯視窗傳回值的簡單一實例_javascript技巧

來源:互聯網
上載者:User

a.html:

<form name="form1" method="post" action=""><a href="javascript:void(null)" class="add" onClick="open('b.html','','resizable=1,scrollbars=1,status=no,toolbar=no,menu=no,width=500,height=400,left=150,top=50')">增加</a><input type="text" name="text1"></form>

b.html:

<script language="javascript" type="text/javascript">function returnValue(){window.opener.document.all.text1.value=document.getElementById("returnText").value;window.close();}</script>  <input type="button" name="Submit" value="提交" onclick="returnValue();">  <input name="returnText" type="text" id="returnText"></p>

補充:window.opener 的用法

window.opener 的用法在一般的用法中,只是用來解決關閉視窗時不提示快顯視窗, 而對它更深層的瞭解一般比較少。其 實 window.opener是指調用window.open方法的視窗。

在工作中主要是用來解決部分提交的。這種跨頁操作對工作是非常有協助的。

如果你在主視窗開啟了一個頁面,並且希望主視窗重新整理就用這個,開啟頁面的window.opener就相當於

主視窗的window。

主視窗的重新整理你可以用

window.opener.location.reload();

如果你用虛擬目錄:如struts的*.do會提示你重試

你可以改成這樣 window.opener.yourformname.submit()

就好了

2〉

在應用中有這樣一個情況,

在A視窗中開啟B視窗,在B視窗中操作完以後關閉B視窗,同時自動重新整理A視窗

function closeWin(){hasClosed = true;window.opener.location="javascript:reloadPage();";window.close();}function window.onbeforeunload(){if(!hasClosed){window.opener.location="javascript:reloadPage();";}}</script>

上面的代碼在關閉B視窗的時候會提示錯誤,說缺少Object,正確的代碼如下:

function closeWin(){hasClosed = true;window.opener.location="javascript:reloadPage();";window.opener=null;window.close();}function window.onbeforeunload(){if(!hasClosed){//如果已經執行了closeWin方法,則不執行本方法window.opener.location="javascript:reloadPage();";}}</script>reloadPage方法如下:function reloadPage() {history.go(0);document.execCommand("refresh")document.location = document.location;document.location.reload();}

PS:由於需要支援正常關閉和強制關閉視窗時能捕捉到事件,用了全域變數hasClosed

==============================================

補充,在父視窗是frame的時候在重新整理父視窗的時候會出現問題:

The page cannot be refreshed without resending the information.

後修改如下:

window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;

不需要執行內建的reload()方法,注意,不要再畫蛇添足加上這一句:

window.opener.parent.document.frames.item('mainFrame').location.reload();

========================================================================================

最後,為了同時支援重新整理普通父視窗和frame父視窗,代碼如下:

function closeWin() {hasClosed = true;<%if(null != frame){%>window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;<%}else{%>window.opener.location = "javascript:reloadPage();";<%}%>//window.opener.top.mainFrame.location="javascript:reloadPage();";//self.opener.frames.mainFrame.location.reload(true);window.opener = null;window.close();}function window.onbeforeunload(){if (!hasClosed) {<%if(null != frame){%>window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;<%}else{%>window.opener.location = "javascript:reloadPage();";<%}%>window.opener = null;}}

window.opener 的用法

window.opener 返回的是建立當前視窗的那個視窗的引用,比如點擊了a.htm上的一個連結而開啟了b.htm,然後我們打算在b.htm上輸入一個值然後賦予a.htm上的一個id為“name”的textbox中,就可以寫為:

window.opener.document.getElementById("name").value = "輸入的資料";

對於javascript中的window.opener沒有很好的理解。

為什麼架構中不能使用,快顯視窗的父視窗不能在架構裡面的某個頁面呢?那怎樣通過快顯視窗操作架構中的父視窗呢?

opener.parent.frames['frameName'].document.all.input1.value 試試這個:)

frame架構裡的頁面要改其他同架構下的頁面或父架構的頁面就用parent

window.opener引用的是window.open開啟的頁面的父頁面。

window.frames對象可以引用iframe裡的頁面,也可以引用frameset裡的頁面.

可以這樣

window.frames[0].document.getElementById('xx');

可以這樣

window.frames[0].document.body.innerHTML;

frm = window.parent.window.frames['uploadFrame'];

frmDocument = frm.document;

frm.sb(3); //sb 是uploadFrame頁面裡的一個函數

對於firefox

如果你遇到報錯:parent.document.frames has no properties

換為如下代碼就可以了,這個代碼IE,ff相容. frm = window.parent.window.frames['uploadFrame'];其實 frames 集合并不是掛在 document 而是掛在 window 對象下.

注意這樣修改frame裡的頁面有限制,就是必須是同域下的,否則無法訪問

如果是同一域下,但是子網域名稱不同,那麼涉及到的js,html檔案都加上一句。

document.domain = xxx.com [這裡填寫你的網域名稱]document.getElementById('iframeid').contentWindow.document.getElementById('someelementid');

問:

在父視窗window.open()一個子視窗。並定義一個變數i。

在子視窗輸入一個值j然後window.opener.i=j;

這樣能傳過去。但我在子視窗最後加了個window.close();就無法傳值了。

請問是否有辦法解決這個問題。使我傳遞值之後再關閉子視窗。

代碼如下:

父視窗:parent.jsp

<script>var i;window.open('<%=contextPath%>/usermanage/newscontrol/cd.jsp);</script><input type="button" onclick="alert(i)">

子視窗:cd.jsp

<script>function subm(){window.opener.i=5;window.close();}</script><input type="button" onclick="subm()">

最佳答案

你可以在父視窗放一個

<input id="fromChild" type="hidden" /><input type="button"onclick="alert(document.getElementById('fromChild').value)">

在子視窗中:

function subm(){window.opener.document.getElementById('fromChild').value=5;window.close();}

這樣既可

<head><script language=javascript>function windowclose(){ window.opener=null;window.close();}</script></head><body><input id="Button1" type="button" value="button" onclick="windowclose()" /></body>

以上這篇js快顯視窗傳回值的簡單一實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.