問題描述:
目前在做一個人員管理功能,要從使用者表裡面進行多選,最後将選中的使用者拼接為字元串傳回
(使用者也不是很多大概五千吧,不妙的地方在于,這是H5站點…..)
存在以下幾種情況,是以checkbox選擇必須儲存
(1)搜尋
(2)分頁
(3)頁面跳轉
其實都是初始化的問題吧=_=
讀取人員清單大概是這樣的流程

其實用的是zepto(因為采用了SUI架構),但我當jq寫的,無差别
查了一下有好幾種方法
1.cookie
2.localstorage
3.隐藏域
但是localstorage試了之後不成功(我沒學會),後來采用了在搜尋前儲存但一樣有點問題
于是我用了下面這種也許不是很聰明的方法
沒有用到隐藏域或localstorage
解決方案:
1.在js中建立倆全局變量
(1)數組selected,存選中的人員
(2)字元串users,人員清單(其實是selected用英文逗号拼接一下),友善在頁面間傳
同時,頁面初始化時判斷上個頁面傳過來的users是否為空,不為空的話把字元串轉為數組,存在selected裡面
selected=users.split(",");
2.input的value設為使用者id
<input type="checkbox" name="checkbox" onclick="clickIt(this)" value="'+result.data.list[i].id+'">
3.每次點選checkbox,把id加到selected數組中,取消時将該id去除
function clickIt(checkbox){
var $thisObj=$(checkbox);
var v=$thisObj.val();
if (checkbox.checked == true){
//Action for checked
if($.inArray(v,selected)==-1){
selected.push(v);
}
}else{
//Action for not checked
for(var i=0;i<=selected.length-1;i++){
if(sel[i]==v){
selected.splice(i,1);
}
}
}
}
4.每讀取新的一頁時,判斷是否有id與selected中重合,若有則設為選中
function reselect() {
$("input[type='checkbox']").each(function(){
var v=$(this).val();
if ($.inArray(v,selected)!=-1){
$(this).prop("checked",true);
}
});
}
5.跳轉時将selected拼接成字元串users,利用ajax傳回人員管理頁,如果要調回來,把這個字元串傳過來,
users=selected.join(",");
大概是這樣吧。
我其實非常擔憂安全性
可能用localstorage,session什麼的要好一點,但完全來不及去學了
參考:
[1]jq:翻頁時,儲存上頁多選框checkbox選中狀态來自 <https://www.cnblogs.com/echoppy/p/6689986.html>
[2]js數組與字元串的互相轉換來自 <https://www.cnblogs.com/LeoBoy/p/5899734.html>