台灣最大程式設計社群網站
線上人數
1043
 
會員總數:242649
討論主題:187620
歡迎您免費加入會員
討論區列表 >> PHP >> 多選下拉選單排序問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
多選下拉選單排序問題
價值 : 5 QP  點閱數:175 回應數:6

樓主

testuser
門外漢
0 1
16 1
發送站內信

請問多選下拉式選單如何POST後,要如何依照原來選擇的順序呢?
因POST後會變成原本選單的順序,謝謝。



搜尋相關Tags的文章: [ 下拉式選單 ] , [ php ] , [ multiple select ] , [ 順序 ] ,
本篇文章發表於2018-06-06 17:08
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
這無解。
除非你做自定義的select來解決。
因為select原則,就是他xx的太智能(障)化,會給你自動排序。
本篇文章回覆於2018-06-06 18:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

淺水員
檢舉此回應
下面的方法是在 JavaScript 紀錄點選的順序
等到傳送前設定 hidden 的值來傳送資料
<pre lang="php"> <?php $d=isset($_GET["drpUser"])?json_decode($_GET["drpUser"]):[]; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>example</title> <script type="text/javascript"> function onSelectChange(oSelect) {//選項更動時同步更新紀錄於 oSelect.arr if(!oSelect.arr) oSelect.arr=[]; var opts=oSelect.options; var i,k,arr,n=opts.length for(i=0;i<n;++i) { if(opts[i].selected) { if(oSelect.arr.indexOf(i)<0) oSelect.arr.push(i); } else { if((k=oSelect.arr.indexOf(i))>=0) oSelect.arr.splice(k,1); } } console.log(oSelect.arr); } function onFormSubmit(oSelect,oHidden) {//傳送資料前將 oSelect.arr 的內容以 json格式 寫到 oHidden if(!oSelect.arr) oSelect.arr=[]; var i,n,arr=[]; for(i=0,n=oSelect.arr.length;i<n;++i) arr.push(oSelect.options[oSelect.arr[i]].value); oHidden.value=JSON.stringify(arr); } </script> </head> <body> <form method="get" onsubmit="onFormSubmit(this.children[0],this.children[1])"> <select multiple onchange="onSelectChange(this)"> <option value="甲">1</option> <option value="乙">2</option> <option value="丙">3</option> </select> <input type="hidden" name="drpUser"> <input type="submit" value="send"> </form>
<?php echo print_r($d,true);?>
</body>
</html>
</pre>
本篇文章回覆於2018-06-07 17:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

淺水員
檢舉此回應
好像因為我裡面有 pre 標籤,導致傳送出錯
重傳:
<pre lang="xml"> <?php $d=isset($_GET["drpUser"])?json_decode($_GET["drpUser"]):[]; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>example</title> <script type="text/javascript"> function onSelectChange(oSelect) {//選項更動時同步更新紀錄於 oSelect.arr if(!oSelect.arr) oSelect.arr=[]; var opts=oSelect.options; var i,k,arr,n=opts.length for(i=0;i<n;++i) { if(opts[i].selected) { if(oSelect.arr.indexOf(i)<0) oSelect.arr.push(i); } else { if((k=oSelect.arr.indexOf(i))>=0) oSelect.arr.splice(k,1); } } console.log(oSelect.arr); } function onFormSubmit(oSelect,oHidden) {//傳送資料前將 oSelect.arr 的內容以 json格式 寫到 oHidden if(!oSelect.arr) oSelect.arr=[]; var i,n,arr=[]; for(i=0,n=oSelect.arr.length;i<n;++i) arr.push(oSelect.options[oSelect.arr[i]].value); oHidden.value=JSON.stringify(arr); } </script> </head> <body> <form method="get" onsubmit="onFormSubmit(this.children[0],this.children[1])"> <select multiple onchange="onSelectChange(this)"> <option value="甲">1</option> <option value="乙">2</option> <option value="丙">3</option> </select> <input type="hidden" name="drpUser"> <input type="submit" value="send"> </form>
<?php echo print_r($d,true);?>
</body>
</html>
</pre>
本篇文章回覆於2018-06-07 17:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

淺水員
檢舉此回應
只好貼在外面了
example.php
本篇文章回覆於2018-06-07 17:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

testuser
檢舉此回應
謝謝兩位大回覆



因為不太懂json格式,所以我用兩個陣列去做,也有跑出要的結果,
json還要在研究一下要怎麼用。
本篇文章回覆於2018-06-13 09:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

淺水員
檢舉此回應
【5F,35行】
建議在這行的前面或後面插入 i--
因為刪除完元素後,後面的元素會往前挪。

目前沒出錯的原因是一次只有變動1個元素
如果是一次變動多個元素的話這邊可能會發生錯誤
本篇文章回覆於2018-06-13 18:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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