表單序列化


原生表單序列化:
  隨着Ajax的出現,表單序列化已經成為一種需求,
  在學習原生Ajax時,若用POST方法向后台提交數據時,就需要將表單序列化
  在JavaScript中可以利用表單字段的type屬性,連同name和value屬性,
  一起實現表單的序列化。
  在進行表單序列化之前,需要弄清楚在表單提交期間,瀏覽器是怎樣將數據發送給服務器的。
    --對表單字段的名稱和值進行URL編碼,使用和號(&)分隔
    --不發送禁用的表單字段
    --只發送勾選的復選框和單選按鈕
    --不發送type為"reset"和"button"的按鈕
    --多選選擇框中的每個選中的值單獨一個條目
    --在單擊提交按鈕提交表單的情況下,也會發送提交按鈕,否則不發送提交按鈕
    --<select>元素的值,就是選中的<option>元素的value特性的值。如果<option>
      元素沒有value屬性,則就是<option>元素的文本值

  實現表單序列化的函數為:
  function serialize(form){
    var parts=[],
        field=null,
        i,
        len,
        j,
        optLen,
        option,
        optValue;
        for (i = 0; i < form.elements.length; i++) {
          field=form.elements[i];
          switch (field.type) {
            case 'select-one':
            case 'select-multiple':
            if(field.name.length){
              for (var j = 0; j < field.options.length; j++) {
                option=field.options[j];
                if (option.selected) {
                  optValue="";
                  if (option.hasAttribute) {
                    optValue=(option.hasAttribute('value') ? option.value : option.text);
                  }else{
                    optValue=(option.attribute['value'].specified ? option.value : option.text);
                  }
                  parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue));
                }
              }
            }
            break;
            case undefined:   //字段集
            case "file":      //文本輸入
            case "submit":    //提交按鈕
            case "reset":     //重置按鈕
            case "button":    //自定義按鈕
              break;
            case "radio":    //單選按鈕
            case "checkbox": //復選框
              if (!field.checked) {
                break;
              }
              //執行默認操作
            default:
              //不包含沒有名字的表單字段
              if(field.name.length){
                parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
              }
          }
        }
        return parts.join("&");
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM