iT邦幫忙

0

javascript 跨頁產生值

狀況是這樣
我有一頁面A,按查詢後會單出視窗B頁面,在B頁查得資料後,會回填A頁的欄位,B頁自行關閉.
目前我使用回填文字方塊(<inptu type="text" name="name1">)都可以
但現在有一個下拉選單<select name="name2"><option vale="0">請選擇</option></select>)
它無法得到值
我是利用
<script language="javascript">
var obj = document.getElementById('name2');
obj.add(new Option("文本", "值"));
</script>
如果下拉選單在同一頁,那麼是可以成功的,但如果跨頁就
像文字方塊
加 window.opener.document.all.name1.value ='<%=a1 %>';
是OK的
但下拉選單就一沒反應
var obj = window.opener.document.all.getElementById('name2');
請問要如何修改才能達到 從B頁,把選單內容寫回A頁

1 個回答

7
wiseguy
iT邦超人 1 級 ‧ 2014-08-20 17:46:36
最佳解答

tanpen提到:
<select name="name2">

tanpen提到:
var obj = window.opener.document.all.getElementById('name2');

這兩行寫錯了。select 必須有 id,才能用 getElementById 來取。另外也不必加 all。

&lt;pre class="c" name="code">&lt;select name="name2" id="name2">
var obj = window.opener.document.getElementById('name2');

PS. 不要再用 all 了,那是古老的 IE 版本在用的。

看更多先前的回應...收起先前的回應...
tanpen iT邦研究生 3 級 ‧ 2014-08-21 08:55:42 檢舉

謝謝 wiseguy大大回覆,我這個系統還是跑ASP,算滿舊的..
我有試過把all拿掉,就連文字方塊也無法寫回去了..一般我會用all,或是form的名字
至於下拉選單我也加了ID名還是寫不回去..請教還有可能是什麼地方出錯嗎?
感恩..

wiseguy iT邦超人 1 級 ‧ 2014-08-21 11:01:22 檢舉

你貼出來的內容就上面那些,我就只能告訴你上面那些有這兩個錯誤。我改了之後就可以傳了。
你沒貼出你完整的程式,我不可能知道你還有哪裡錯誤。

wiseguy iT邦超人 1 級 ‧ 2014-08-21 11:20:05 檢舉

tanpen提到:
我這個系統還是跑ASP,算滿舊的..

你搞錯什麼了嗎?Server 端跑什麼,跟 Client 端的 html/Javascript 一點關係也沒有。

tanpen iT邦研究生 3 級 ‧ 2014-08-21 15:21:06 檢舉

javascript 是在clicent的...我知道,是我表達的方式不對..抱歉

tanpen iT邦研究生 3 級 ‧ 2014-08-21 15:21:28 檢舉

A的程式

&lt;pre class="c" name="code">
&lt;%@ LANGUAGE = vbscript %>





&lt;meta http-equiv="Content-Type" content="text/html; charset=big5">
&lt;title>A&lt;/title>

&lt;script language="JavaScript">
&lt;!--

    function NOSearch() {
 
        window.open('B.asp', '', 'scrollbars=yes,left=80,top=50,width=950,height=600');
    }

//-->
&lt;/script>



&lt;BODY style="margin: 0" >
&lt;form action="a.asp" method="post" name="aForm">

&lt;Center>
 
         &lt;input id="name1" name="name1" type="text" size="5"> 
        &lt;select id="name2" name="name2" >
         &lt;option value="aa">aa&lt;/option>  

&lt;/select>

 
     &lt;a href="#1" onClick="NOSearch();" >選擇號碼&lt;/a>
 
 

&lt;/Center>

&lt;/form>
tanpen iT邦研究生 3 級 ‧ 2014-08-21 15:21:57 檢舉

B頁的程式

&lt;pre class="c" name="code">




&lt;meta http-equiv="Content-Type" content="text/html; charset=big5">
&lt;titleb&lt;/title>
 


&lt;BODY style="margin: 0"  >
&lt;form action="b.asp" method="post" name="bForm">
 
 
 
&lt;Center>

  &lt;script language="javascript">
    
    window.opener.document.all.name1.value = "aab";
    var obj = window.opener.document.all.getElementById('name2');
    obj.add(new Option("文本", "值"));
         
                       
&lt;/script>

&lt;/Center>

&lt;/form>
tanpen iT邦研究生 3 級 ‧ 2014-08-21 15:23:58 檢舉

這是我在測的頁面程式,感恩

wiseguy iT邦超人 1 級 ‧ 2014-08-21 16:09:29 檢舉

var obj = window.opener.document.all.getElementById('name2');

講不聽,不是已經說不要加 all 嗎?加 all 是錯的。你自己問題中都寫
var obj = document.getElementById('name2');
是對的。這 getElementById 是 document 的 method,那為什麼在 b.asp 的第 19 行,document 跟 getElementById 中間會多出一個 all?
你知道 b.asp 第 18 與第 19 行的差別嗎?知道為什麼 18 行要有 all,而 19 行不能有 all 嗎?

外獅佬 iT邦大師 1 級 ‧ 2014-08-21 16:12:13 檢舉

老人家說:惹熊、惹虎,千萬不能惹發火的超人...炸死你

wiseguy iT邦超人 1 級 ‧ 2014-08-21 16:15:36 檢舉

第 18 與 19 行的差別:
document.all.name1 這個 name1 是取 name="name1"。
document.getElementById('name2') 這個 name2 是取 id="name2"。
如果你寫

&lt;pre class="c" name="code">window.opener.document.all.name1.value = "aab";  
var obj = window.opener.document.all.name2;

&lt;pre class="c" name="code">window.opener.document.gelElementById('name1').value = "aab";  
var obj = window.opener.document.gelElementById('name2');

都對。但你卻搞混了。

tanpen iT邦研究生 3 級 ‧ 2014-08-21 17:09:47 檢舉
&lt;pre class="c" name="code">
window.opener.document.all.name1.value = "aab";
var obj = window.opener.document.all.name2;  
obj.add(new Option("文本", "值"));

如果是這樣去測,nam1 我能寫入,但name2還是沒反應

&lt;pre class="c" name="code">window.opener.document.gelElementById('name1').value = "aab";    
var obj = window.opener.document.gelElementById('name2'); 
obj.add(new Option("文本", "值"));

如果這樣作,是兩個都不會有反應

wiseguy iT邦超人 1 級 ‧ 2014-08-22 11:12:39 檢舉

我在 Firefox 上測試,兩種都正常。你的問題不是取物件,而是

&lt;pre class="c" name="code">obj.add(new Option("文本", "值"));

這個指令在 IE8 以上的版本是無效的。

tanpen iT邦研究生 3 級 ‧ 2014-08-22 11:46:21 檢舉

wiseguy提到:
這個指令在 IE8 以上的版本是無效的。

我用其它瀏覽器測,果然可以..謝謝W大了
看樣子如果用IE8是無解了

wiseguy iT邦超人 1 級 ‧ 2014-08-25 15:19:05 檢舉

http://msdn.microsoft.com/en-us/library/ie/ms535921%28v=vs.85%29.aspx
微軟官方說法,IE8 以上版本,必須在標準模式下才支援上述指令。

我要發表回答

立即登入回答