台灣最大程式設計社群網站
線上人數
1110
 
會員總數:246691
討論主題:190104
歡迎您免費加入會員
討論區列表 >> Java Script/ Node.js >> 下拉選單 IE抓的到值但CHROME抓不到值
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
下拉選單 IE抓的到值但CHROME抓不到值
價值 : 100 QP  點閱數:2434 回應數:13
樓主

小猴
初學者
40 11
1217 24
發送站內信

各位前輩好~想請教
下面一段程式碼是下拉選單a02會連動下拉選單a03的部分程式碼
然後表單傳值ACTION到目標網頁request.form("a03")
目前遇到的狀況是,IE能抓取到a03的值,但是Chrome卻無法抓到

在原網頁先嘗試讀第"一"項的值 alert (document.getElementById('a030').value
都能正確秀出
//cnt為序號,表示第幾項

var v = str.split("/");
var cnt=<%=i%>
var s = "<select name=a03"+cnt+ " id=a03"+cnt+ " onChange=SetAmount03("+<%=i%>+","+"this.value); " + " >"

s = s + "<option value='10000'>1萬</option>"
for (j=0;j<v.length;j++){
var tval= v[j];
var val = v[j]/10000;
if (val>1){
s = s + "<option value='" + tval +"'"
s = s + ">" + val + "萬"+ "</option>" + "\n"
}
}
s = s +"</select>"
a03_list<%=i%>.innerHTML = s;


本篇文章發表於2014-05-07 11:27
1樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
不知道是你描述的有問題,還是我理解的有問題
你的意思是,你的A網頁上有兩個下拉選單,下拉1的值變動時會影響下拉2的內容
當A網頁送出到B網頁時
IE的B網頁能夠接收到A網頁的下拉2的值,但是chrome沒辦法接收A網頁的下拉2的值?
在A網頁用alert檢查下拉2的值時,不論IE還是chrome都能正確顯示下拉2的值?

如果我的理解沒錯
這是非常非常詭異的情況
script可能會因為瀏覽器而導致執行結果不同
但是主機端語法,不論ASP還是PHP理論上都是在主機執行後產生網頁原始檔,再傳送給瀏覽器解讀,所以瀏覽器的差異應該不至於影響主機端的結果
除非你有在B網頁上設定針對不同瀏覽器做處理
本篇文章回覆於2014-05-07 16:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

小猴
檢舉此回應
您好 迷路大~
就像是您說的狀況沒有錯!!

A網頁上有兩個下拉選單,下拉1的值變動時會影響下拉2的內容 (也就是for迴圈的地方)
當A網頁送出到B網頁時 (使用method="post"方式)
IE的B網頁能夠接收到A網頁的下拉2的值,但是chrome沒辦法接收A網頁的下拉2的值?
(在B網頁request.form的下方我用Response.Write來查看接收的值,IE正常顯示,Chrome完全沒數值)
在A網頁用alert檢查下拉2的值時,不論IE還是chrome都能正確顯示下拉2的值? (沒錯,都能正確alert出下拉2的value)

網頁是使用ASP格式,也沒有針對瀏覽器作分別處理

目前也想不到還能做什來測試問題的核心在哪?
本篇文章回覆於2014-05-07 17:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

香帥
檢舉此回應
建議您的程式碼要完整po出,才不會讓人用猜的(像SetAmount03程式碼)
亦即拿到您的程式碼就可以直接去try(除了資料庫部分,有些使用者還會附上sql讓回答者自動產生資料庫及table,節省回答者件模擬提問者須建立資料庫時間),這樣更容易得到幫助.
話拉回來,您的問題
ie 及 chrome 送資料到server去會因為編碼不一樣(使用者選項勾選不同,程式設計者送出的是那種encode不同),有可能得到server傳回不同的結果喔
我沒您的完整程式碼,無法放到我server去幫您試,只能做以上的推論


本篇文章回覆於2014-05-08 23:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

小猴
檢舉此回應
謝謝香帥~
下面附上我覺得可能相關的程式碼提供參考,內容無關的欄位我會做刪減,覺得不詳細的地方煩請告知我,我再貼上來,謝謝~
除了找不到問題核心,我也懷疑我自己對於A到B網頁的資料銜接部分或許就錯誤了...才會產生這現象0rz

A網頁
for (j=1;j<=(paymoney/100000);j++){
var Addstr=parseInt(j*10000);
if (j==1){
str=Addstr;
}
else{
str=str+"/"+Addstr;
}
}

var v = str.split("/");
var cnt=<%=i%>
var s = "<select name=tra03_cover"+cnt+ " id=tra03_cover"+cnt+ " onChange=SetAmount03("+<%=i%>+","+"this.value); " + " >"
s = s + "<option value='10000'>1萬</option>"
for (j=0;j<v.length;j++){
var tval= v[j];
var val = v[j]/10000;
if (val>1){
s = s + "<option value='" + tval +"'"
s = s + ">" + val + "萬"+ "</option>" + "\n"
}
}
s = s +"</select>"
tra03_list<%=i%>.innerHTML = s;





B網頁 '取得資料
Dim iGIdx

iTGroups = request.form("traveller_groups")
DebugOut bDebug,"iTGroups = " & iTGroups
iTGroups = CInt(iTGroups)

For iGIdx = 0 to iTGroups
DebugOut bDebug,"insured_name" & iGIdx & " = " & request.form("insured_name" & iGIdx)
DebugOut bDebug,"insured_id" & iGIdx & " = " & request.form("insured_id" & iGIdx)
If request.form("insured_name" & iGIdx) <> "" And request.form("insured_id" & iGIdx) <> "" then
...
...
...
...
redim preserve tra01_cover(iGIdx)
redim preserve tra02_cover(iGIdx)
redim preserve tra03_cover(iGIdx)

realPerson = realPerson + 1

is_OtherCompany = ""
is_R01 = ""

insured_name(iGIdx) = request.form("insured_name" & iGIdx)
birth_year = request.form("insured_birth_year" & iGIdx)
birth_month = request.form("insured_birth_month" & iGIdx)
birth_day = request.form("insured_birth_day" & iGIdx)
birthday = birth_year & "/" & birth_month & "/" & birth_day
DebugOut bDebug,"birthday = " & birthday
insured_birthday(iGIdx) = CDate(birthday)
insured_id(iGIdx) = request.form("insured_id" & iGIdx)

is_OtherCompany = request.form("is_OtherCompany" & iGIdx)
if is_OtherCompany = "true" then
OtherCompany(iGIdx) = request.form("OtherCompany" & iGIdx)
OtherCompany_SumInsured(iGIdx) = request.form("OtherCompany_SumInsured" & iGIdx)
else
OtherCompany(iGIdx) = ""
OtherCompany_SumInsured(iGIdx) = ""
end if
isR01 = request.form("isR01" & iGIdx)
if isR01 = "true" then
benefit_relation(iGIdx) = "R01"
inheritor(iGIdx) = ""
else
benefit_relation(iGIdx) = request.form("benefit_relation" & iGIdx)
inheritor(iGIdx) = request.form("inheritor" & iGIdx)
end if
tra01_cover(iGIdx) = request.form("tra01_cover" & iGIdx)
tra02_cover(iGIdx) = request.form("tra02_cover" & iGIdx)
tra03_cover(iGIdx) = request.form("tra03_cover" & iGIdx)

在下面這邊我又分別對
request.form("tra02_cover" & iGIdx)
request.form("tra03_cover" & iGIdx)
作response.write
得到的結果就如同發問的一樣chrome,tra02_cover有數值跑出來tra03_cover空白沒任何數字

在下面就是存入資料庫,欄位tra03_cover也如預期的用IE有資料,Chrome則是NULL導致更後面的SQL無法執行

sql_travel = "select * from buffer_ot"
Set rsTI = Server.CreateObject("Adodb.Recordset")
rsTI.open sql_travel,DBConnection,3,3
For iTI = 0 to UBound(insured_name)
rsTI.AddNew
rsTI("serialno") = SerialNo
rsTI("insured_serial") = iTI
rsTI("id") = insured_id(iTI)
rsTI("name") = insured_name(iTI)
rsTI("dob") = insured_birthday(iTI)
rsTI("benefit_relation") = benefit_relation(iTI)
rsTI("inheritor") = inheritor(iTI)
rsTI("othercompany") = OtherCompany(iTI)
rsTI("othercompany_sum_insured") = OtherCompany_SumInsured(iTI)
rsTI("tra01_cover") = tra01_cover(iTI)
rsTI("tra02_cover") = tra02_cover(iTI)
rsTI("tra03_cover") = tra03_cover(iTI) 'step4
rsTI.Update
Next
rsTI.close : set rsTI = nothing
本篇文章回覆於2014-05-09 14:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

小猴
檢舉此回應
補上SetAmount03程式碼

function SetAmount03(cnt,v){
document.pf_form.amount_03<%=cnt%>.value = v;
}
本篇文章回覆於2014-05-09 14:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

香帥
檢舉此回應
您缺少的東西我實在太多了,先說A網頁,我用猜的給值,
i=5
paymoney=1000000
//tra03_list<%=i%>.innerHTML = s; 找不到對應,改為以下
window.document.body.innerHTML = s;
document.pf_form.amount 找不到對應
還跟您補上可執行的一些必要程式碼,如下程式碼,才可執行
(測試網址在http://ap.a168a.com/blueshop/b.asp)


但是無法再猜下去您的form資料如何submit,您都沒附上完整程式碼,如何去測呢
建議先補上我可掛上去SUBMIT的A的完整程式碼

本篇文章回覆於2014-05-09 23:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

小猴
檢舉此回應
香帥您好
很抱歉給的資料不全

paymoney=document.pf_form.tra02_cover<%=i%>.value為網頁A的第一個下拉(name=tra02_cover)選單,會連動到tra03_cover的資料(EX:tra02_cover=300萬,則tra03_cover最大值會到30萬..)

i為人數,則會動態產生多少人數的表格,也是很多欄位name後會有+數字的原因

想請教FORM傳值,一定要寫在<FORM></FORM>標籤中才能submit出去嗎?
因為我看B網頁的取值
tra03_cover(iGIdx) = request.form("tra03_cover" & iGIdx)
想說是取A網頁ID或name為tra03_cover的標籤項目,不知道這邊觀念有沒有錯誤?
目前A網頁的name為tra03_cover的標籤項目只有下拉選項這個,並且是寫在script標籤中,不知道會不會有影響

另外有關於tra03_cover的還有另一段,可是好像跟request.form取直沒關係?
SetCookie("tra03_cover"+i,eval('document.pf_form.tra03_cover'+i+'.value'));
本篇文章回覆於2014-05-12 11:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

香帥
檢舉此回應
request.form 就是用 form
若是不在 form 內, 一般是用 get 的方法,將參數及值放在網址列類似以?tra03_coverxx=123&tra03_coveryy=456 這樣傳
本篇文章回覆於2014-05-13 01:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

小猴
檢舉此回應
您好~~
下面在補上完整的function,但連動的地方太多(均會導致name=tra03_cover下拉選單無法出現)
目前還在嘗試縮減無關的程式碼,但還是有700多列...我會繼續刪減看看

想請教我試過更改tra03_cover的id和name 再到B網頁request.form結果一樣
但就能確定是這function裡的tra03_cover所傳出的值
chrome無法產生,是否有可能是不支援這種產生出select下拉選單傳值的方式? 謝謝~


<span id="tra03_list<%=iInsured%>" name="tra03_list<%=iInsured%>">


本篇文章回覆於2014-05-13 10:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

小猴
檢舉此回應
找到可能是問題的關鍵了...以下為我的猜測

由於是用<span id="tra03_list<%=iInsured%>" name="tra03_list<%=iInsured%>">來產生<select></select>
IE會在<span></span>產生<select></select>後保留<select></select>原始碼,自然下一頁能找到ID並取值

但是chrome會在<span></span>產生下拉後就不會在關連到Javascript接著取值

以上是我的想法? 如果真的是這樣,是否有辦法帶出tra03_cover的值並且IE CHROME是同樣結果呢? 謝謝~~~
本篇文章回覆於2014-05-13 13:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
不錯的參考

迷路
捐贈 VP 給 迷路 檢舉此回應
動態關連式下拉經常在用
像是地址下拉之類的
從來沒聽過chrome有這種問題
本篇文章回覆於2014-05-13 14:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

小猴
檢舉此回應
您好~
因為目前tra02_cover(IE CHROME均正常)和tra03_cover的差異點在於
<select></select>標籤tra02_cover是在<body>固定存在的




但tra03_cover卻是在script內產生並用innerHTML貼回標籤


目前覺得有可能的問題點~~~~
本篇文章回覆於2014-05-13 15:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

小猴
檢舉此回應
找到原因了
跟function無關,是HTML的tag結構有誤,導致瀏覽器解析錯誤

解決辦法1.把特定的TABLE標籤刪除可解決
2.把FORM標籤移到BODY的下方
本篇文章回覆於2014-05-26 17:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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