获取序列化from表单数据

封装:获取序列化from表单数据

class serializeForm {
    constructor(options={}){
        this.form=options.form
    }
    getElements() { 
        const tagElements = this.form.querySelectorAll('input,select,textarea');
        if (tagElements.length > 0) {
            return Array.from(tagElements);
        }
        try {
            console.error(new Error('当前form没有表单内容,请检查后再试'));
        } catch (error) {
            console.log(error);
        }
        return false;
      } 

      serializeElement(element) { 
        let method = element.type.toLowerCase(); 
        if(method == 'select-one' || method =='textarea'){
            return [element.name, element.value]; 
        }
        if (['text', 'password', 'number', 'file', 'color', 'hidden', 'date','search','email','tel','url'].includes(method)) {
            return [element.name, element.value];
          } else if (['checkbox', 'radio'].includes(method)) {
            if (element.checked){
                return [element.name, element.value]; 
              }
          }
          return false;
      }
      codeurl(parameter){
        if (parameter) { 
            let key = encodeURIComponent(parameter[0]); 
            if (key.length == 0) return; 
            if (parameter[1].constructor != Array) parameter[1] = [parameter[1]]; 
            let values = parameter[1]; 
            let results = []; 
            for (let i = 0; i < values.length; i++) { 
              results.push(key + '=' + encodeURIComponent(values[i])); 
            } 
            return results; 
          }
      }
      serializeUrlForm() { 
        let elements = this.getElements(); 
        let queryComponents = new Array(); 
        for (let i = 0; i < elements.length; i++) {
          let queryComponent = this.serializeElement(elements[i]);
          if(queryComponent){
            queryComponent=this.codeurl(queryComponent)
            if (queryComponent) {
                queryComponents.push(queryComponent);
            }
          }
        }
        return queryComponents.join('&');
      }

      serializeForm() { 
        let elements = this.getElements(); 
        let queryComponents = {}; 
        for (let i = 0; i < elements.length; i++) {
          let queryComponent = this.serializeElement(elements[i]);
          if(queryComponent){
            let KEY=queryComponent[0]
            let VALUE=queryComponent[1]
            
            if (queryComponents[KEY]) {
                if(Object.prototype.toString.call(queryComponents[KEY])=='[Object Array]'){
                    queryComponents[KEY].push(VALUE)
                }else{
                    queryComponents[KEY]=[queryComponents[KEY],VALUE];
                }
            }else{
                queryComponents[KEY]=VALUE
            }
          }
          
        }
        return queryComponents;
      }
}

const fromitem= document.getElementById('fromid')
let text=new serializeForm({
        form:fromitem
    })
function onfrom(){
    console.log(text.serializeForm())
    console.log(text.serializeUrlForm())
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不听念经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值