欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  WEB前端

javascript传参数有哪些

程序员文章站 2021-11-28 19:03:05
...

1.隐式创建 html 标签

<input type="hidden" name="tc_id" value="{{ tc_id }}">这种方法一般配合 ajax,上面的 value 使用了模板引擎


2.window['data']

window["name"] = "the window object";


3.使用 localStorage,cookie 等存储

window.localStorage.setItem("name", "xiaoyueyue");

window.localStorage.getItem("name");

特点:cookie,localStorage,sessionStorage,indexDB

特性 cookie localStorage sessionStorage indexDB

数据生命周期 一般由服务器生成 除非被清理,否则一直存在 页面关闭就清理 除非被清理,否则一直存在

可以设置过期时间  

数据存储大小 4K 5M 5M 无限

与服务端通信 每次都会携带在 header 中 不参与 不参与 不参与

,对于请求性能影响 


4.获取地址栏方法

function parseParam(url) {

  var paramArr = decodeURI(url)

      .split("?")[1]

      .split("&"),

    obj = {};

  for (var i = 0; i < paramArr.length; i++) {

    var item = paramArr[i];

    if (item.indexOf("=") != -1) {

      var tmp = item.split("=");

      obj[tmp[0]] = tmp[1];

    } else {

      obj[item] = true;

    }

  }

  return obj;

}

(2.正则表达式方法

function GetQueryString(name) {

  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");

  var r = window.location.search.substr(1).match(reg);

  if (r != null) return unescape(r[2]);

  return null;

}



5.标签绑定函数传参

<button id="test" name="123" yue="xiaoyueyue" friend="heizi" onclick="console.log(this.getAttribute('yue'),this.getAttribute('friend'))"></button>


6.HTML5 data-* 自定义属性

var box = document.createElement("p");

box.innerHTML ="<button id='1' data-name='xiaochen' data-age='25' data-friend='heizi' onclick='alertInfo(this.dataset)'>点击</button>";

document.body.appendChild(box);

// name,age,friend

function alertInfo(data) {

  alert(

    "大家好,我是" +

      data.name +

      ", 我今年" +

      data.age +

      "岁了,我的好朋友是" +

      data.friend +

      " !"

  );

}



7.字符串传参

var data = [

  {

    name: "xiaoyueyue",

    age: "25",

    home: "shanxi",

    friend: "heizi"

  }

];

var box = document.createElement("p"),

  html = "";

for (var i = 0; i < data.length; i++) {

  html +=

    "<button id='btn' onclick='alertInfo(id,\""+

    data[i].name +

    '","' +

   data[i].age +

    '","' +

    data[i].home +

    '","' +

    data[i].friend +

    "\")'>点击</button>";

}

box.innerHTML = html;

document.body.appendChild(box);

function alertInfo(id, name, age, home, friend) {

  alert("我是 " + name + " , " + friend + " 是我的好朋友");

}



8.arguments

<button onclick="fenpei('f233c7a290ae11e8a0f00050568b2fdd','100','0号 车用柴油(Ⅴ)')">分配</button>

function fenpei() {

  var args = Array.prototype.slice.call(arguments);

  alert("我是" + args[2] + "油品,数量为 " + args[1] + " 吨, id为 " + args[0]);

}


9.form 表单

// form表单序列化,摘自JS高程

function serialize(form) {

  var parts = [],

    field = null,

    i,

    len,

    j,

    optLen,

    option,

    optValue;

  for (i = 0, len = form.elements.length; i < len; i++) {

    field = form.elements[i];

    switch (field.type) {

      case "select-one":

      case "select-multiple":

        if (field.name.length) {

          for (j = 0, optLen = field.options.length; j < optLen; j++) {

            option = field.options[j];

            if (option.selected) {

              optValue = "";

              if (option.hasAttribute) {

                optValue = option.hasAttribute("value")

                  ? option.value

                  : option.text;

              } else {

                optValue = option.attributes["value"].specified

                  ? option.value

                  : option.text;

              }

              parts.push(

                encodeURIComponent(field.name) +

                  "=" +

                  encodeURIComponent(optValue)

              );

            }

          }

        }

        break; 

      case undefined: //fieldset

      case "file": //file input

      case "submit": //submit button

      case "reset": //reset button

      case "button": //custom button

        break;

      case "radio": //radio button

      case "checkbox": //checkbox

        if (!field.checked) {

          break;

        }

      /* falls through */

      default:

        //don't include form fields without names

        if (field.name.length) {

          parts.push(

            encodeURIComponent(field.name) +

              "=" +

              encodeURIComponent(field.value)

          );

        }

    }

  }

  return parts.join("&");

}

使用:

document.querySelector("button").onclick = function() {

  console.log("param: " + serialize(document.getElementById("formData"))); // param: ordersaleCode=&extractType=0

};


10. 发布订阅处理复杂逻辑传参

  10.1方法源码

var Event = (function() {

  var clientList = {},

    pub,

    sub,

    remove;

  var cached = {}; 

  sub = function(key, fn) {

    if (!clientList[key]) {

      clientList[key] = [];

    }

    // 使用缓存执行的订阅不用多次调用执行

    cached[key + "time"] == undefined ? clientList[key].push(fn) : "";

    if (cached[key] instanceof Array && cached[key].length > 0) {

      //说明有缓存的 可以执行

      fn.apply(null, cached[key]);

      cached[key + "time"] = 1;

    }

  };

  pub = function() {

    var key = Array.prototype.shift.call(arguments),

      fns = clientList[key];

    if (!fns || fns.length === 0) {

      //初始默认缓存

      cached[key] = Array.prototype.slice.call(arguments, 0);

      return false;

    }

    for (var i = 0, fn; (fn = fns[i++]); ) {

      // 再次发布更新缓存中的 data 参数

      cached[key + "time"] != undefined

        ? (cached[key] = Array.prototype.slice.call(arguments, 0))

        : "";

      fn.apply(this, arguments);

    }

  };

  remove = function(key, fn) {

    var fns = clientList[key];

    // 缓存订阅一并删除

    var cachedFn = cached[key];

    if (!fns && !cachedFn) {

      return false;

    }

    if (!fn) {

      fns && (fns.length = 0);

      cachedFn && (cachedFn.length = 0);

    } else {

      if (cachedFn) {

        for (var m = cachedFn.length - 1; m >= 0; m--) {

          var _fn_temp = cachedFn[m];

          if (_fn_temp === fn) {

            cachedFn.splice(m, 1);

          }

        }

      }

      for (var n = fns.length - 1; n >= 0; n--) {

        var _fn = fns[n];

        if (_fn === fn) {

          fns.splice(n, 1);

        }

      }

    }

  };

  return {

    pub: pub,

    sub: sub,

    remove: remove

  };

})();


在微信小程序中使用的例子:

// app.js

App({

  onLaunch: function(e) {

    // 注册 storage,这是第二条

    wx.Storage = Storage;

    // 注册发布订阅模式

    wx.yue = Event;

  }

});


使用实例

// 添加收货地址页面订阅

 onLoad: function (options) {

        wx.yue.sub("addAddress", function (data) {

            y.setData({

                addAddress: data

            })

        })

 }

/**

 * 生命周期函数--监听页面隐藏

 */

 onHide: function () {

    // 取消多余的事件订阅

    wx.Storage.removeItem("addAddress");

},

 onUnload: function () {

    // 取消多余的事件订阅

    wx.yue.remove("addAddress");

}

// 传递地址页面获取好数据传递

wx.yue.pub("addAddress", data.info);

// 补充跳转返回