#如圖:
這是一個表格,裡邊有select,現在取得到了一個關於所有下拉選單的值的字串。
想把它們切成單獨的資料存進數組,目前沒有思路,求各位老哥給個思路= =
**
**
取得到的字串是:「年終匯算2005年核定徵收預繳-月度2016年請選擇查帳徵收預繳-季度2008年第四季核定徵收」。
也就是說,所有的select選擇的值都連在一起了,我沒有切開的思路了。
最後想弄成
[{type:"年终汇算",time1:"2005年",time2:"",fangs:"核定征收"},{type:"预缴-月度",time1:"2016年",time2:"2月",fangs:"查账征收"},{type:"预缴-季度",time1:"2008年",time2:"第四季度",fangs:"查账征收"}]
就是最後想存成這種樣子。
**
**
這其中選項,如果使用者沒選,就會顯示“請選擇”,請問如何才能判斷不讓這些值裡出現“請選擇”呢? (也就是說,不能不選就提交,要每個選項都選了,才能提交儲存資料)。
PS:1.我的年度和月度季度的選項不一樣的,上邊是二級聯動,下邊月度季度是三級聯動
2.我這個select是在table的trtd裡寫的,而這些,都是有個"添加"按鈕動態生成的。
不好意思剛才忘記說這兩點了,補充一波-.-
#淡淡烟草味2017-06-14 10:55:26
1、非常不建議用切分的方式來做,應該想辦法優化 “獲取已選擇” 的項目,使得這些字段天然就是帶結構的。
用切分的方法來做的話,將來維護成本也很高的。
如果你硬要用正規的方法,那麼應該先用 "-" 吧字串切開。
對於每一串,去匹配"年終匯算" "月度" "季度"等,得到type,然後繼續匹配時間,然後匹配fangs
2、在表單提交代碼裡,依序取得每個選項的值,進行合法性判斷。實際上,這也是通用的做法。
typecho2017-06-14 10:55:26
以下為我的思路
每個行實例都具有一個value
對象,如:this.value = {}
;
行內的 select
使用標準的數字值,用以比對數組下標,確保取值的準確;
每個select
的change
事件都會修改一個對應的值,如:第一個select.type
選取時,在聯動程式碼之前加上this.value.type = $type[0]. value
—— 自行代入對應的變數;
使用隱藏域來管理輸出,如:;
你可以使用任意的資料格式,個人建議盡量使用數字,如:
// 数组
this.value = [1,1,1,0]; // 预缴-月度|2016年|1月|查账征收
// 对象
this.value = {
type: 2, // 预缴-季度
years: 1, // 2016年
time: 3, // 第四季度
fangs:1 // 核定征收
};
最後的 select.fangs
選擇時會產生可用數據,以供表單使用,如:
$fangs.on('change.app', $.proxy(function(e){
// 添加值
this.value.fangs = $fangs[0].value;
// 生成表单值
this.$output.val(JSON.stringify(this.value));
}, this));
擴充一個 驗證方法,如:AppRow.prototype.validate()
,該方法根據 this.value
的內容監測表單的合法性,並傳回一個布林值,如:
首先是否為空對象,是,則說明本行第一個 select
為 請選擇
,返回 false
;
如果選擇了 .type - 0 - 年度匯算
(第一個 select
),則取得 AppRow.typeChose[this.value.type]
物件;
物件不存在,說明可能是越界,如根本不存在 AppRow.typeChose[4]
, 回傳 false
;
根據所選 AppRow.typeChose[this.value.type].types
得出 typeSubLen
目前類型對應的後面表單的數量,即當前類型應該有幾個相關的子級;
如果
(this.value.length - 1) < typeSubLen 說明長度不足,缺少參數,又或
!this.value.time1 不存在,回傳
false
this.value.time1
存在,值 === -1
或 !AppRow.typeChose[0].types[this.value.time1]
,回傳 false
;
存在,值 === -1
或!AppRow.typeChose[0].types[0].zType_time1[this.value.time1]
,回傳,回傳
;
this.value.fangs === -1,回傳
false;