台灣最大程式設計社群網站
線上人數
1430
 
會員總數:244807
討論主題:188842
歡迎您免費加入會員
討論區列表 >> Java Script/ Node.js >> javascipt傳值至另一個網頁
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
javascipt傳值至另一個網頁
價值 : 10 QP  點閱數:4908 回應數:13

樓主

emily
初學者
34 20
1112 32
發送站內信

各位高手您好 ,我是javascript初學請多指教
1.A.asp 說明:建入要新增的筆數 , 然後多筆輸入 then 傳值至b.asp
2.b.asp 我要如何抓a.asp輸入的值 , 然後直接show輸入值 , 確定無誤後才要新增

a.asp的值要如何傳到b.asp呢 ? b.asp要如何抓a.asp的值呢 ?
非常感謝!!


<form action="b.asp" method="post" name="Frm_Update" id="Frm_Update" enctype="multipart/form-data">
<script language="javascript">
function setid()
{
str='<br>';
if(!window.Frm_Update.upcount.value)
window.Frm_Update.upcount.value=1;
else{
for(i=1;i<=window.Frm_Update.upcount.value;i++)
str+='<div class="text">'+i+'.編號'+':<input type="text" value="" size="6" onKeyUp="vbscript:setflowno.value=Ucase(setflowno.value)" name="setflowno'+i+'" >;數量一:<input type="text" value="" size="6" name="Numone'+i+'" >;數量二:<input type="text" value="" size="6" name="Numtwo'+i+'" >(mg/l);數量三:<input type="text" value="" size="6" name="Numtree'+i+'" >(mg/l)<input type=hidden name="id'+i+'" value="id'+i+'"></div><br>';
window.upid.innerHTML=str+'<br>';}
}
</script>
<span class="text">請先設定編號
<input type="text" class="tx" value="1" name="upcount" size="6">
<input type="button" name="Button" onClick="setid();" value="設定" >
</span> </td>
</tr>
</table>
<tr align="center" >
<td align="left" id="upid" height="122">
<div align="center">
<table width="100%" border="0">
<tr>
<td height="39" class="text">1. 編號:
<input name="SetFlowNo1" type="text" id="SetFlowNo1" value="" size="6" onKeyUp="vbscript:setflowno.value=Ucase(setflowno.value)";>
數量一:
<input name="WaterTotal1" type="text" id="Numone1" value="" size="6">
;數量二:
<input name="CODWater1" type="text" id="Numtwo1" value="" size="6">
(mg/l);數量三:
<input name="SSWater1" type="text" id="Numtree1" value="" size="6">
(mg/l)</td>

<input name="submit" type="submit" value="開 始 試 算" >

搜尋相關Tags的文章: [ javascipt傳值至另一個網頁 ] , [ 多筆輸入 ] , [ ] ,
本篇文章發表於2005-05-16 15:29
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Karuizawa
檢舉此回應
把這行拿掉您之前自己寫的程式應該就可以正常了吧
enctype="multipart/form-data"
本篇文章回覆於2005-05-16 16:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

emily
檢舉此回應
karuizawa 謝謝您
但我不知道要如何做傳值:
2.b.asp 我要如何抓a.asp輸入的值 , 然後直接show輸入值 , 確定無誤後才要新增

a.asp的值要如何傳到b.asp呢 ? b.asp要如何抓a.asp的值呢 ?
本篇文章回覆於2005-05-16 17:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
給您一個範例參考
有點小複雜,不過會比較靈活
使用者不必輸入要傳幾筆
傳幾筆使用者自己決定
使用者可以按新增直接新增一筆
新增了後如果反悔也可按刪除動態的刪除那一筆

先來a.asp
<%@ Language=VBScript %>
<%

NowOptId=1

%>

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--

function btnNew_onclick() {
	var tmpShowId=window.document.form1.txtTmpShowId;
	if(tmpShowId.value=='')
	{
		window.alert('請輸入顯示代號');
		tmpShowId.focus();
		return false;
	}
	var tmpOptCont=window.document.form1.txtTmpOptCont;
	if(tmpOptCont.value=='')
	{
		window.alert('請輸入答案內容');
		tmpOptCont.focus();
		return false;
	}
	var tmpSort=window.document.form1.txtTmpSort;
	if(isNaN(tmpSort.value))
	{
		window.alert('排序請輸入數字');
		tmpSort.focus();
		tmpSort.select();
		return fasle;
	}
	
	var TrElement = window.document.createElement('tr');
	window.tbOpt.appendChild(TrElement);
	
	var tmpOptId=window.document.form1.hidNowOptId;
	var TdElement1=window.document.createElement('td');
	TrElement.appendChild(TdElement1);
	var sHTML1='<INPUT type="hidden" id=hidOptId name=hidOptId value="' +  tmpOptId.value + '">' + tmpOptId.value;
	TdElement1.insertAdjacentHTML('beforeEnd',sHTML1);
	tmpOptId.value=parseInt(tmpOptId.value)+1;
	window.spanNowOptId.innerText=tmpOptId.value;

	var TdElement1=window.document.createElement('td');
	TrElement.appendChild(TdElement1);
	var sHTML1='<INPUT type="text" id=txtShowId name=txtShowId size=2 maxlength=2 value="' +  tmpShowId.value + '">';
	TdElement1.insertAdjacentHTML('beforeEnd',sHTML1);
	tmpShowId.value='';

	var TdElement1=window.document.createElement('td');
	TrElement.appendChild(TdElement1);
	var sHTML1='<INPUT type="text" id=txtOptCont name=txtOptCont size=20 value="' +  tmpOptCont.value + '">';
	TdElement1.insertAdjacentHTML('beforeEnd',sHTML1);
	tmpOptCont.value='';

	var TdElement1=window.document.createElement('td');
	TrElement.appendChild(TdElement1);
	var sHTML1='<INPUT type="text" id=txtSort name=txtSort size=2 maxlength=2 value="' +  tmpSort.value + '">';
	TdElement1.insertAdjacentHTML('beforeEnd',sHTML1);
	tmpSort.value='';

	var TdElement2=window.document.createElement('td');
	TrElement.appendChild(TdElement2);
	var sHTML2='<INPUT type="button" id=btnOptDel name=btnOptDel value="刪除" onclick="return btnOptDel_onclick()">';
	TdElement2.insertAdjacentHTML('beforeEnd',sHTML2);
	
	window.document.form1.txtTmpShowId.focus();
	
}

function btnOptDel_onclick(){
	var aElement=window.document.all(window.document.activeElement.sourceIndex-10);
	window.tbOpt.removeChild(aElement);
}


function btnSend_onclick() {
	window.document.form1.action='b.asp'
	window.document.form1.submit();
}

//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM action="" method=POST id=form1 name=form1>
<TABLE class=TSM border=1 bgcolor=Lavender>
	<tbody id="tbOpt">
	<tr>
		<th class=dh>代號</th>
		<th class=dh>顯示代號</th>
		<th class=dh>答案內容</th>
		<th class=dh>排序</th>
		<th class=dh>操作</th>
	</tr>
	<tr bgcolor=PaleTurquoise>
		<td class=dlc> 
			<INPUT type="hidden" id="hidNowOptId" name=hidNowOptId class=dlc value="<%=NowOptId%>">
			<span id="spanNowOptId"><%=NowOptId%></span>
		</td>
		<td class=dlc>
			<INPUT type="text" id=txtTmpShowId name=txtTmpShowId class=dlc size=2 maxlength=2>
		</td>
		<td class=dlc>
			<INPUT type="text" id=txtTmpOptCont name=txtTmpOptCont class=dlc size=20>
		</td>
		<td class=dlc>
			<INPUT type="text" id=txtTmpSort name=txtTmpSort class=dlc size=2 maxlength=2>
		</td>
		<td class=dlc>
			<INPUT type="button" value="新增" id=btnNew name=btnNew LANGUAGE=javascript onclick="return btnNew_onclick()">
		</td>
	</tr>
</table>
<INPUT type="button" value="送出" id=btnSend name=btnSend LANGUAGE=javascript onclick="return btnSend_onclick()">
</FORM>
</BODY>
</HTML>

接著是接收的b.asp,把資料放到陣列中,如果您要判斷,就自行跑回圈判斷囉

<%@ Language=VBScript %>
<%

	ItmCnt=Request.Form("hidOptId").Count
	Dim Itm
	If ItmCnt > 0 Then	
		'有資料
		ReDim Itm(4,ItmCnt)
		For y = 1 to ItmCnt
			Itm(1,y) = Request.Form("hidOptId").Item(y)
			Itm(2,y) = Request.Form("txtShowId").Item(y)
			Itm(3,y) = Request.Form("txtOptCont").Item(y)
			Itm(4,y) = Request.Form("txtSort").Item(y)
		Next
	End If
%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<style>
.dh{font-size:14;color:yellow;background-color:blue}
.dl{font-size:12}
</style>
</HEAD>
<BODY>
<table border=1 bgcolor=Lavender>
	<tr>
		<th class=dh>代號</th>
		<th class=dh>顯示代號</th>
		<th class=dh>內容</th>
		<th class=dh>排序</th>
	</tr>
<%
	If ItmCnt > 0 Then
		For y = 1 to ItmCnt
%>
	<tr>
		<td class=dl><%=Itm(1,y)%></td>
		<td class=dl><%=Itm(2,y)%></td>
		<td class=dl><%=Itm(3,y)%></td>
		<td class=dl><%=Itm(4,y)%></td>
	</tr>
<%
		Next
	End If
%>
</table>

</BODY>
</HTML>


本篇文章回覆於2005-05-16 17:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

emily
檢舉此回應
感謝topcat的幫忙 , 對我很有幫助
不好意思 , 想再請問一下
function btnOptDel_onclick(){
var aElement=window.document.all(window.document.activeElement.sourceIndex-10);
window.tbOpt.removeChild(aElement);
}
sourceIndex-10 為什麼要-10 ?
因為我新增一個欄位 , 新增可以 , 刪除卻不行!!
非常感謝!!

本篇文章回覆於2005-05-17 10:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
用Javascript新增出來的每一個<td>,<input>等等都是一個物件
要刪除的是<tr>並且包含tr底下的所有物件
所以必須正確找出相對於<input..刪除>的<tr>是哪一個
為了動態的關係,所以用相對的index的方式取得
所以要減多少,您如果會算就用算的...不然慢慢改慢慢測(9,8,7,6,...)...就可以改到正確的了
本篇文章回覆於2005-05-17 10:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

emily
檢舉此回應
謝謝!!
問題解決了 , 但是我是加至13
感謝感謝!!
本篇文章回覆於2005-05-17 10:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
不錯的參考

topcat
捐贈 VP 給 topcat 檢舉此回應
解決了就好...
增加欄位要加上去,減少欄位要減下來
^_^
本篇文章回覆於2005-05-17 16:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
不錯的參考

Jerry Lai
檢舉此回應
to topcat,
我不是要跟您搶分, 我只是提出一些修改的看法, 如果有幸幫到忙, 也希望原發文者不要給我任何分數, 因為寫範例程式真的很辛苦, 我能夠了解...

您的範例程式小弟覺得怪怪的, 想提出下列幾點疑問:
1. ie 專用是嗎? => window.document.all(xxxx);
2. 既然是 ie 專用, 在 ie 上, createElement/appendChild 速度明顯比 innerHTML/insertAdjacentHTML 慢很多, 為何不乾脆全部都用 innerHTML/insertAdjacentHTML, 程式碼也會比較精簡 & 容易理解.
3. 用陣列的方式傳值如果剛好碰到裡面有 "," 或是 "," 加上一個空白 (像是", "), 接收端 (b.asp) 可能會出錯; 個人比較建議給予不同的 name 去傳值會比較安全
4. onclick="return btnOptDel_onclick()" 這行應該不需要 return.
5. activeElement? 通常是用 event.srcElement 吧?
6. 直接傳遞物件不是更快更精準嗎? 像這樣: onclick="btnOptDel_onclick(this)", 還可以避免掉事件沸升的問題.
7. 用 index 計算的方式不準確也比較容易出錯, 建議用遞迴找出 parentElement 的 tagName 為 "TR" 會比較安全
本篇文章回覆於2005-05-18 08:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

emily
檢舉此回應
to jerry

不好意思 , 小妹不才 >_<
1.不明白 innerHTML/insertAdjacentHTML的速度為什麼會比createElement/appendChild 快, 是因為什麼原因呢?
2.如果不用陣列的方式 , 用name傳值要如何作?
我想多了解一點~

感謝感謝!!也很感謝topcat 啦!!
本篇文章回覆於2005-05-18 09:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

Jerry Lai
檢舉此回應
1. 物件導向的方式大部分的時候速度都比較慢的, 再來 ie 的引擎裡針對 innerHTML 這類的最佳化又做的比 createElement 好, 所以會有這種後果.
2. 借 topcat 的範例來說明一下:
var sHTML1='<INPUT type="text" id=txtShowId name=txtShowId size=2 maxlength=2 value="' + tmpShowId.value + '">';
可以改成
var sHTML1='<INPUT type="text" id=txtShowId' + 目前最大的Index + ' name=txtShowId' + 目前最大的Index + ' size=2 maxlength=2 value="' + tmpShowId.value + '">';
如此一來, 新增列中的 ID 跟 name 就會變成像是 txtShowId1, txtShowId2, ....
本篇文章回覆於2005-05-18 10:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
to Jerry Lai大大
分數不是粉重要啦....
重點是提問者的問題解決了
並解可以從中學到東西
^_^

>>1.ie 專用是嗎? => window.document.all(xxxx);
嗯...是IE專用...因為我在公司的系統都提供公司內部的人使用...都是用IE
我抓了其中的部份來作例子

>>2. 既然是 ie 專用, 在 ie 上, createElement/appendChild 速度明顯比 innerHTML/insertAdjacentHTML 慢很多, 為何不乾脆全部都用 innerHTML/insertAdjacentHTML, 程式碼也會比較精簡 & 容易理解.

感謝大大的指正
由於小弟用的編輯器是Visual InterDev6,撰寫語法的時候沒有出現insertAdjacentHTML...所以也沒有研究這個語法耶
大大可否給個範例讓小弟學習學習呢....(或者需要開個討論設定QP給大大)
大大果然是專家
不過由於執行的那一端是在client,筆數也不多...所以忽略了效能上的問題→壞習慣唷...不要學

>>3. 用陣列的方式傳值如果剛好碰到裡面有 "," 或是 "," 加上一個空白 (像是", "), 接收端 (b.asp) 可能會出錯; 個人比較建議給予不同的 name 去傳值會比較安全
陣列的接收方式不是用SPLIT來承接
而是透過回圈
用Request.Form("txtOptCont").Item(y)的方式承接...大致上測試過不會有大大提醒的問題出現
不知道大大可否舉個例子...在啥麼情況下會出現問題呢??

>>4. onclick="return btnOptDel_onclick()" 這行應該不需要 return.
在使用Visual InterDev編輯的時候
這個東西是InterDev自動加上去的...
不寫這個也可以,寫了一樣可以執行,至於未啥InterDev要加這個東西...我就不太清楚說

>>5. activeElement? 通常是用 event.srcElement 吧?
嗯...好像兩個都可以
window.document.activeElement或者window.even.srcElement

>>6. 直接傳遞物件不是更快更精準嗎? 像這樣: onclick="btnOptDel_onclick(this)", 還可以避免掉事件沸升的問題.
請教一下大大...啥是【事件沸升的問題】??

>>7. 用 index 計算的方式不準確也比較容易出錯, 建議用遞迴找出 parentElement 的 tagName 為 "TR" 會比較安全
研究中

本篇文章回覆於2005-05-18 12:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

Jerry Lai
檢舉此回應
1. 用 ie 我個人是沒意見啦, 別誤會, 我寫的多半也都是 for ie, Netscape/FireFox 改太多版了, 要跟上它很累....XD
2. QP 是不用了, 不過 topcat 大大您也太客氣了吧~ 您自己隨便寫就寫的出來的, 小弟就別獻醜了吧!
3. 不是在您這部分造成的, 您的部分是透過迴圈, 但是 ASP 會先轉換成陣列
4. ic...
5. 在這裡可以做到的功能可能一樣, 不過邏輯上是不同的東西.
6. 之前曾經做過物件包物件 (無限層次向右開啟的選單), 然後都用相同的 onclick 處理常式, 這時候程式不一定會照你想像的執行, 因為 onclick 的事件會一直向上沸升, 一直到支援該事件的最頂層為止 (onclick 的話應該是 document.onclick), 所以小弟後來就習慣直接傳遞物件, 比較不容易出錯.
7. ic...
本篇文章回覆於2005-05-18 13:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

emily
檢舉此回應
有看沒有懂說!! 真困難~ 是否可以介紹一本參考書,要研究研究 ,感謝!!
......
For y = 1 to ItmCnt
rs.adddnew
rs("hidoptid") = Request.Form("hidOptId").Item(y)
rs("txtshowid") = Request.Form("txtShowId").Item(y)
rs("txtoptcont") = Request.Form("txtOptCont").Item(y)
rs("txtsort") = Request.Form("txtSort").Item(y)
rs.update
Next
是否可以用此方法直接加入資料庫裡呢? 試過了 , 會出現超出陣列索引的訊息...
本篇文章回覆於2005-05-18 14:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.