iT邦幫忙

0

php雙層下拉式選單選值會跳掉

  • 分享至 

  • xImage

雙層下拉選單選擇後第一層沒問題不會跳掉
但第二層不知道為什麼都會跳掉(明明網址列上有顯示值),如圖
https://ithelp.ithome.com.tw/upload/images/20190703/20117071uR28SePjx0.png

(選擇備料)

https://ithelp.ithome.com.tw/upload/images/20190703/20117071bwWalvEN3v.png
(跳回請選擇...)

https://ithelp.ithome.com.tw/upload/images/20190703/2011707182agMf85Il.png
(程式碼)

看了好久的程式碼,還是不知道錯在哪裡
請各位大大幫幫忙,謝謝!

看更多先前的討論...收起先前的討論...
dragonH iT邦超人 5 級 ‧ 2019-07-03 14:39:24 檢舉
把 $s 跟 $row[0] 印出來看
臉紅、 iT邦新手 5 級 ‧ 2019-07-03 14:50:28 檢舉
印出
S=備料
$row[0] =1
dragonH iT邦超人 5 級 ‧ 2019-07-03 14:53:31 檢舉
怎麼可能@@

反正

print_r
dump_var

都試試

至少要確認這兩個值有符合你的判斷

然後開 瀏覽器 f12

看php生成的 html 是否有格式錯誤之類的
臉紅、 iT邦新手 5 級 ‧ 2019-07-03 14:56:51 檢舉
修改了><
程式碼用圖片顯示的。好吧,懶的打字幫你了。跳過。
不過我也得想說,正常輸出的值因該都是同一個欄位才對。
啥情況下會需要不同的欄位呢?
dragonH iT邦超人 5 級 ‧ 2019-07-03 15:00:05 檢舉
這就對啦

$s 跟 $row[0] 不一樣的話

永遠都不會觸發你 echo selected 的那行

沒有資料庫的資料

沒辦法給你範例
ccutmis iT邦高手 2 級 ‧ 2019-07-03 17:29:21 檢舉
從你上面的sql來看
$row[0] : productId
$row[1] : workshopName
所以你在後面的if判斷式應該改成
$s==$row[1] 才可能有機會成為true(比如說$s跟$row[1]都為'備料')
臉紅、 iT邦新手 5 級 ‧ 2019-07-03 17:50:12 檢舉
剛剛改成$s==$row[1] 已經成功了,謝謝以上的各位
只是重選第一層時 第二層不會跳回"請選擇"而是停留在剛剛所選的
ccutmis iT邦高手 2 級 ‧ 2019-07-03 18:01:03 檢舉
我在小魚的留言裡 有個優化的寫法樓主也可參考一下
把if(){...}else{...}八行縮成一行 結果不變
臉紅、 iT邦新手 5 級 ‧ 2019-07-03 19:07:34 檢舉
謝謝 ~~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
小魚
iT邦大師 1 級 ‧ 2019-07-03 14:45:29

https://ithelp.ithome.com.tw/upload/images/20190703/20105694spYJR4DFZP.png

這段怪怪的,
這兩行應該只差一個selected而已,
為什麼連值都不一樣了,
另外 $s != null其實可以先放前面,
&&的判斷只要一個不成立就不會再往下判斷,
如果null就不用再判斷下一個條件了.
積少成多可以加強程式效率.

看更多先前的回應...收起先前的回應...
臉紅、 iT邦新手 5 級 ‧ 2019-07-03 14:50:54 檢舉

對!剛剛都改成1了
但結果一樣...

ccutmis iT邦高手 2 級 ‧ 2019-07-03 15:09:28 檢舉

補充一下那個if{...}else{...}可以縮寫成一行

echo '<option value="'.$row[1].'" '.(($s!=null&&$s==$row[1])?'selected':'').'>'.$row[1].'</option>\n';
小魚 iT邦大師 1 級 ‧ 2019-07-03 15:24:10 檢舉

我都喜歡分開寫 XD
我覺得這樣比較清楚...

小魚 iT邦大師 1 級 ‧ 2019-07-03 15:29:40 檢舉

你意思是說 沒有workshop的時候是對的,
有workshop的時候是錯的 嗎?
看了半天還是搞不清楚你在問什麼...

其實你需要做很多動作去抓蟲,
1.通過直接看顯示出來的原始碼
2.通過php的echo
3.通過alert
4.通過console.log
通過各種方式去看結果和你的盼望有沒有一樣,
從而找出問題發生的地方,
再去尋找解決方案.

ccutmis iT邦高手 2 級 ‧ 2019-07-03 15:38:12 檢舉

因為這裡if{}else{}其實就是判斷符合條件的option標籤項目加上'selected'屬性
而option不管有沒有符合條件一定是要列出來的
這樣縮成一行是有減少重覆寫一次echo option tag跟讓結構單純化的用義...
/images/emoticon/emoticon82.gif

小魚 iT邦大師 1 級 ‧ 2019-07-03 19:57:48 檢舉

ccutmis
什麼時候學會擲杯的?
/images/emoticon/emoticon34.gif

小魚 iT邦大師 1 級 ‧ 2019-07-03 19:59:19 檢舉

補充一下,
以你的情況,
正常來說,
value會放$row[0],
而text會放$row[1].
看不懂value跟text的話,
簡單說上面的例子,
前面放$row[0], 後面放$row[1].

ccutmis iT邦高手 2 級 ‧ 2019-07-03 21:38:15 檢舉

小魚
/images/emoticon/emoticon77.gif
我也覺得value放$row[0]比較合理,
那之前的demo code就要改成

echo '<option value="'.$row[0].'" '.(($s!=null&&$s==$row[0])?'selected':'').'>'.$row[1].'</option>\n';
臉紅、 iT邦新手 5 級 ‧ 2019-07-04 14:12:54 檢舉

謝謝~

我要發表回答

立即登入回答