1 回答
TA貢獻2003條經驗 獲得超2個贊
下拉選擇和取值思路
以下為我的思路
每個行實例都具有一個
value對象,如:this.value = {};行內的
select使用標準的數字值,用以比對數組下標,確保取值的準確;每個
select的change事件都會修改一個對應的值,如:第一個select.type選中時,在聯動代碼之前添加this.value.type = $type[0].value—— 自行代入對應的變量;使用隱藏域來管理輸出,如:
<input type="hidden" name="name[]" />;
你可以使用任意的數據格式,個人建議盡量使用數字,如:
// 數組
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],返回false;!this.value.fangs或this.value.fangs === -1,返回false;條件都滿足,返回
true;
添加回答
舉報
