首頁  >  問答  >  主體

javascript - 字串切割,沒思路..

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

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

#
女神的闺蜜爱上我女神的闺蜜爱上我2683 天前714

全部回覆(2)我來回復

  • 淡淡烟草味

    淡淡烟草味2017-06-14 10:55:26

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

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

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

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

    回覆
    0
  • typecho

    typecho2017-06-14 10:55:26

    下拉選擇與取值思路

    以下為我的思路

    • 每個實例都具有一個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) < typeSubLen 說明長度不足,缺少參數,又或 !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
    • 回覆
      0
  • 取消回覆