javascript - 字串切割,沒思路..
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-14 10:53:26
0
2
750

#如圖:
這是一個表格,裡邊有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裡寫的,而這些,都是有個"添加"按鈕動態生成的。

不好意思剛才忘記說這兩點了,補充一波-.-

#
女神的闺蜜爱上我
女神的闺蜜爱上我

全部回覆(2)
淡淡烟草味

1、非常不建議用切分的方式來做,應該想辦法優化 “獲取已選擇” 的項目,使得這些字段天然就是帶結構的。

用切分的方法來做的話,將來維護成本也很高的。

如果你硬要用正規的方法,那麼應該先用 "-" 吧字串切開。
對於每一串,去匹配"年終匯算" "月度" "季度"等,得到type,然後繼續匹配時間,然後匹配fangs

2、在表單提交代碼裡,依序取得每個選項的值,進行合法性判斷。實際上,這也是通用的做法。

typecho

下拉選擇與取值思路

以下為我的思路

  • 每個實例都具有一個value對象,如:this.value = {}

  • 行內的 select 使用標準的數字值,用以比對數組下標,確保取值的準確;

  • 每個selectchange 事件都會修改一個對應的值,如:第一個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) 說明長度不足,缺少參數,又或 !this.value.time1 不存在,回傳 false

  • this.value.time1 存在,值 === -1!AppRow.typeChose[0].types[this.value.time1],回傳 false

  • this.value.time2

    存在,值 === -1!AppRow.typeChose[0].types[0].zType_time1[this.value.time1],回傳,回傳

  • !this.value.fangs
  • this.value.fangs === -1,回傳 false

    條件都滿足,回傳
  • true
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板