欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > JS教程 >

jQuery获取表单数据serialize方法的利用和留意事项

发表于2019-04-23 22:03| 次阅读| 来源网络整理| 作者session

摘要:jQuery获取表单数据serialize方法的利用和留意事项
jQuery获取表单数据serialize方法的利用和留意事项

  /*

      获取表单formId下的数据

  */

  var formData = $('#formId').serialize();

  /*

      表单formId下的数据formData最终序列化的后果如下所示:

          userName=admin&userAge=22&userMobile=13551369999

  */

  /*

      需求留意的是jQuery中serialize方法是没有去除表单值两端空格的,

      此时需求对源码稍作修正(此jQuery版本以1.9.1为例),详细修正如下:

      大概在jQuery1.9.1版本源码的7341行处,可搜查要害字:encodeURIComponent即可找到,

      找到后将

          s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);

      修正为s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(jQuery.trim(value));即可

  */

  //Serialize an array of form elements or a set of

  //key/values into a query string

  jQuery.param = function (a, traditional) {

      var prefix,

  s = [],

  add = function (key, value) {

      // If value is a function, invoke it and return its value

      value = jQuery.isFunction(value) ? value() : (value == null ? "" : value);

      //quber:为serialize方法去除值两边的空格

      s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(jQuery.trim(value));

  };

      // Set traditional to true for jQuery <= 1.3.2 behavior.

      if (traditional === undefined) {

          traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;

      }

      // If an array was passed in, assume that it is an array of form elements.

      if (jQuery.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {

          // Serialize the form elements

          jQuery.each(a, function () {

              add(this.name, this.value);

          });

      } else {

          // If traditional, encode the "old" way (the way 1.3.2 or older

          // did it), otherwise encode params recursively.

          for (prefix in a) {

              buildParams(prefix, a[prefix], traditional, add);

          }

      }

      // Return the resulting serialization

      return s.join("&").replace(r20, "+");

  };