javascript - String-Cutting, keine Ahnung ...
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-14 10:53:26
0
2
764

Wie im Bild gezeigt:
Dies ist eine Tabelle mit der Auswahl darin. Jetzt haben wir eine Zeichenfolge über die Werte aller Dropdown-Menüs erhalten.
Ich möchte sie in separate Daten zerlegen und in einem Array speichern. Bitte geben Sie mir einige Ideen

**

Erste Frage:

**

Die erhaltene Zeichenfolge lautet: „Genehmigter Einzug und Vorauszahlung zum Jahresende 2005 – monatlich 2016, bitte wählen Sie Rechnungseinzug und Vorauszahlung – vierteljährlich, genehmigter Einzug im vierten Quartal 2008“.
Mit anderen Worten, alle von select ausgewählten Werte sind miteinander verbunden, und ich habe keine Ahnung, wie ich sie auseinanderschneiden kann.
Endlich will ich es schaffen

[{type:"年终汇算",time1:"2005年",time2:"",fangs:"核定征收"},{type:"预缴-月度",time1:"2016年",time2:"2月",fangs:"查账征收"},{type:"预缴-季度",time1:"2008年",time2:"第四季度",fangs:"查账征收"}]

Das ist es, was ich am Ende retten möchte.

**

Zweite Frage:

**

Wenn der Benutzer diese Optionen nicht auswählt, wird „Bitte auswählen“ angezeigt. Wie können wir beurteilen, ob „Bitte auswählen“ in diesen Werten vorkommt? (Mit anderen Worten: Sie können die Daten nicht übermitteln, ohne sie auszuwählen. Sie müssen jede Option auswählen, bevor Sie die Speicherdaten übermitteln können.)

PS: 1. Meine Optionen für das jährliche und das monatliche Quartal sind unterschiedlich und die untere Option für das monatliche Quartal ist die Verknüpfung der dritten Ebene. und das sind alle. Es gibt eine Schaltfläche „Hinzufügen“, die dynamisch generiert wird.


Es tut mir leid, dass ich gerade vergessen habe, diese beiden Punkte zu erwähnen, ich füge sie einfach hinzu -.-

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

Antworte allen(2)
淡淡烟草味

1、非常不建议用切分的方式来做,应该想办法优化 “获取已选择” 的项目,使得这些字段天然就是带结构的。

用切分的方法来做的话,将来维护成本也很高的。

如果你硬要用正则的方法,那么应该先用 "-" 吧字符串切开。
对于每一串,去匹配"年终汇算" "月度" "季度"等,得到type,然后继续匹配时间,然后匹配fangs

2、在表单提交代码里,依次获取每个选项的值,进行合法性判断。实际上,这也是通用的做法。

typecho

下拉选择和取值思路

以下为我的思路

  • 每个实例都具有一个value对象,如:this.value = {}

  • 行内的 select 使用标准的数字值,用以比对数组下标,确保取值的准确;

  • 每个 selectchange 事件都会修改一个对应的值,如:第一个 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.fangsthis.value.fangs === -1,返回 false

  • 条件都满足,返回 true

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage