狀況是這樣
我有一頁面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頁
tanpen提到:
<select name="name2">
tanpen提到:
var obj = window.opener.document.all.getElementById('name2');
這兩行寫錯了。select 必須有 id,才能用 getElementById 來取。另外也不必加 all。
<pre class="c" name="code"><select name="name2" id="name2">
var obj = window.opener.document.getElementById('name2');
PS. 不要再用 all 了,那是古老的 IE 版本在用的。
謝謝 wiseguy大大回覆,我這個系統還是跑ASP,算滿舊的..
我有試過把all拿掉,就連文字方塊也無法寫回去了..一般我會用all,或是form的名字
至於下拉選單我也加了ID名還是寫不回去..請教還有可能是什麼地方出錯嗎?
感恩..
你貼出來的內容就上面那些,我就只能告訴你上面那些有這兩個錯誤。我改了之後就可以傳了。
你沒貼出你完整的程式,我不可能知道你還有哪裡錯誤。
tanpen提到:
我這個系統還是跑ASP,算滿舊的..
你搞錯什麼了嗎?Server 端跑什麼,跟 Client 端的 html/Javascript 一點關係也沒有。
javascript 是在clicent的...我知道,是我表達的方式不對..抱歉
A的程式
<pre class="c" name="code">
<%@ LANGUAGE = vbscript %>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>A</title>
<script language="JavaScript">
<!--
function NOSearch() {
window.open('B.asp', '', 'scrollbars=yes,left=80,top=50,width=950,height=600');
}
//-->
</script>
<BODY style="margin: 0" >
<form action="a.asp" method="post" name="aForm">
<Center>
<input id="name1" name="name1" type="text" size="5">
<select id="name2" name="name2" >
<option value="aa">aa</option>
</select>
<a href="#1" onClick="NOSearch();" >選擇號碼</a>
</Center>
</form>
B頁的程式
<pre class="c" name="code">
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<titleb</title>
<BODY style="margin: 0" >
<form action="b.asp" method="post" name="bForm">
<Center>
<script language="javascript">
window.opener.document.all.name1.value = "aab";
var obj = window.opener.document.all.getElementById('name2');
obj.add(new Option("文本", "值"));
</script>
</Center>
</form>
這是我在測的頁面程式,感恩
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 嗎?
老人家說:惹熊、惹虎,千萬不能惹發火的超人...
第 18 與 19 行的差別:
document.all.name1 這個 name1 是取 name="name1"。
document.getElementById('name2') 這個 name2 是取 id="name2"。
如果你寫
<pre class="c" name="code">window.opener.document.all.name1.value = "aab";
var obj = window.opener.document.all.name2;
或
<pre class="c" name="code">window.opener.document.gelElementById('name1').value = "aab";
var obj = window.opener.document.gelElementById('name2');
都對。但你卻搞混了。
<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還是沒反應
<pre class="c" name="code">window.opener.document.gelElementById('name1').value = "aab";
var obj = window.opener.document.gelElementById('name2');
obj.add(new Option("文本", "值"));
如果這樣作,是兩個都不會有反應
我在 Firefox 上測試,兩種都正常。你的問題不是取物件,而是
<pre class="c" name="code">obj.add(new Option("文本", "值"));
這個指令在 IE8 以上的版本是無效的。
wiseguy提到:
這個指令在 IE8 以上的版本是無效的。
我用其它瀏覽器測,果然可以..謝謝W大了
看樣子如果用IE8是無解了
http://msdn.microsoft.com/en-us/library/ie/ms535921%28v=vs.85%29.aspx
微軟官方說法,IE8 以上版本,必須在標準模式下才支援上述指令。