Heim >Web-Frontend >js-Tutorial >So übergeben Sie Parameter in Javascript

So übergeben Sie Parameter in Javascript

藏色散人
藏色散人Original
2021-06-27 10:26:326544Durchsuche

So übergeben Sie Parameter in JavaScript: Erstellen Sie zunächst eine entsprechende JS-Datei. Übergeben Sie dann die Parameter über „Funktion AlertInfo (Name, Alter, Zuhause, Freund) {...}“.

So übergeben Sie Parameter in Javascript

Die Betriebsumgebung dieses Artikels: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Wie übergebe ich Parameter in Javascript?

Zusammenfassung der JS-Parameterübergabefähigkeiten

1. HTML-Tags implizit erstellen

<input type="hidden" name="tc_id" value="{{tc_id}}">
Diese Methode wird im Allgemeinen mit Ajax verwendet. Der obige Wert verwendet eine Vorlagen-Engine

2.window['data']

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

3 . Verwenden Sie localStorage, Cookies usw. zum Speichern von

window.localStorage.setItem("name", "xiaoyueyue");
window.localStorage.getItem("name");
Features: Cookie, localStorage, sessionStorage, indexDB
5MNimmt nicht teil Wie Sie der obigen Tabelle entnehmen können, wird Cookie nicht mehr zur Speicherung empfohlen. Wenn keine großen Datenspeicheranforderungen bestehen, können Sie <code>localStorage und sessionStorage verwenden. Versuchen Sie bei Daten, die sich nicht wesentlich ändern, localStorage zum Speichern zu verwenden. Andernfalls können Sie sessionStorage zum Speichern verwenden. Hinweis: Beim Speichern von Daten vom Typ object ignoriert diese Deep-Copy-Methode Funktionen und undefiniert4. Holen Sie sich die Adressleistenmethode
    Kapseln Sie sie sich selbst Methode
    Features cookie localStorage sessionStorage indexDB
    Datenlebenszyklus Im Allgemeinen durch den Server Generate bestimmt, können Sie die Ablaufzeit festlegen Solange die Seite nicht bereinigt wird, bleibt sie immer vorhanden Größe 4K 5M
    Unbegrenzt Mit dem Server kommunizieren Es wird jedes Mal im Header übertragen, was sich auf die Anforderungsleistung auswirkt Nimmt nicht teil
    Nimmt nicht teil
    var obj = {
      type: undefined,
      text: "xiaoyueyue",
      methord: function() {
        alert("I am an methord");
      }
    };
    
    localStorage.setItem("data", JSON.stringify(obj));
    console.log(JSON.parse(localStorage.getItem("data"))); // {text: "xiaoyueyue"}
    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. Methode für reguläre Ausdrückecookie 已经不建议用于存储。如果没有大量数据存储需求的话,可以使用 localStoragesessionStorage 。对于不怎么改变的数据尽量使用 localStorage 存储,否则可以用 sessionStorage 存储。

    注意点:存储object类型数据,此深拷贝方法会忽略掉函数和 undefined
    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;
    }

    4.获取地址栏方法

    1. 自己封装的方法
    <!--base-->
    <button id="test1" onclick="alert(id)">test1</button>
    
    <!--高级-->
    <button
      id="test"
      name="123"
      yue="xiaoyueyue"
      friend="heizi"
      onclick="console.log(this.getAttribute(&#39;yue&#39;),this.getAttribute(&#39;friend&#39;))"
    >
      test
    </button>

    2.正则表达式方法

    var box = document.createElement("p");
    box.innerHTML =
      "<button id=&#39;1&#39; data-name=&#39;xiaoyueyue&#39; data-age=&#39;25&#39; data-friend=&#39;heizi&#39; onclick=&#39;alertInfo(this.dataset)&#39;>点击</button>";
    document.body.appendChild(box);
    
    // name,age,friend
    function alertInfo(data) {
      alert(
        "大家好,我是" +
          data.name +
          ", 我今年" +
          data.age +
          "岁了,我的好朋友是" +
          data.friend +
          " !"
      );
    }

    5.标签绑定函数传参

      var getIndexByClass =  function (param) {
        var element = param.classname ? param : param.target;
        var className = element.classname;
        var domArr = Array.prototype.slice.call(document.querySelectorAll('.' + className));
        for (var index = 0; index < domArr.length; index++) {
          if (domArr[index] === element) {
            return index;
          }
        }
        return -1;
      },

    this 拓展

    使用 this 传参,在使用 art-template 中琢磨出来的,再也不用只传递一个 id 拼接成好几个参数了!happy!

    <button data-name="xiaoyueyue">点击</button>
    这里需要注意一点:存储的 data—含有大写的单词 =》这里会统一转化为小写,比如:data-orderId = “2a34fb64a13211e8a0f00050568b2fdd”,在实际取值的时候为this.dataset.orderid;

    event

    既然可以使用 this,那么在事件当中event.target方法也是可以的:

    根据 class 获取当前的索引值,参数可以为 event 对象
    var btn = document.querySelector("button");
    btn.onclick = function() {
      alert(this.dataset.name);
    };

    6.HTML5 data-* 自定义属性

    var name = "xiaoyueyue",
      age = 25;
    
    var box = document.createElement("p");
    box.innerHTML = "<button onclick=\"alertInfo(&#39;" + name + "&#39;)\">点击</button>";
    document.body.appendChild(box);
    
    // name, age
    function alertInfo(name, age, home, friend) {
      alert("我是" + name);
    }
      var name = 'xiaoyueyue',
          age = '25',
          home = 'shanxi',
          friend = 'heizi',
          DQ = "&quot;"; // 双引号的超文本标记语言
    
        var params = "&quot;" + name + "&quot;,&quot;" + age + "&quot;,&quot;" + home + "&quot;,&quot;" + friend + "&quot;";
        var params2 = DQ + name + DQ + ',' + DQ + age + DQ + ',' + DQ + home + DQ + ',' + DQ + friend + DQ;
        var box = document.createElement("p");
        box.innerHTML = "<button onclick=&#39;alertInfo(" + params + ")&#39;>点击</button>";
        console.log(box)
        document.body.appendChild(box);
    
    
        // name, age,home,friend
        function alertInfo(name, age, home, friend) {
          alert("我是" + name + ',' + "我今年" + age + "岁了!")

    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=&#39;btn&#39;  onclick=&#39;alertInfo(id,\"" +
        data[i].name +
        &#39;","&#39; +
        data[i].age +
        &#39;","&#39; +
        data[i].home +
        &#39;","&#39; +
        data[i].friend +
        "\")&#39;>点击</button>";
    }
    box.innerHTML = html;
    document.body.appendChild(box);
    
    function alertInfo(id, name, age, home, friend) {
      alert("我是 " + name + " , " + friend + " 是我的好朋友");
    }

    多参传递

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

    复杂传参

    function fenpei() {
      var args = Array.prototype.slice.call(arguments);
      alert("我是" + args[2] + "油品,数量为 " + args[1] + " 吨, id为 " + args[0]);
    }

    8.arguments

    arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用 arguments 对象在函数中引用函数的参数。它是一个类数组的对象。

    【推荐学习:javascript高级教程

    // 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&#39;t include form fields without names
            if (field.name.length) {
              parts.push(
                encodeURIComponent(field.name) +
                  "=" +
                  encodeURIComponent(field.value)
              );
            }
        }
      }
      return parts.join("&");
    }
    <form id="formData">
      <p class="pop-info">
        <label for="ordersaleCode">订单编号:</label>
        <input
          type="text"
          id="ordersaleCode"
          name="ordersaleCode"
          placeholder="请输入订单编号"
        />
      </p>
      <p class="pop-info">
        <label for="extractType">配送方式:</label>
        <select id="extractType" name="extractType" class="mySelect">
          <option value="0" selected>配送</option>
          <option value="1">自提</option>
        </select>
      </p>
    </form>
    <button>获取参数</button>

    9.form 表单

    借助form

    document.querySelector("button").onclick = function() {
      console.log("param: " + serialize(document.getElementById("formData"))); // param: ordersaleCode=&extractType=0
    };
    5. Übergabe von Parametern für die Etikettenbindung

    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
      };
    })();

    diese Erweiterung

    Verwenden Sie diesen Parameter, um Parameter zu übergeben, und denken Sie über die Verwendung von art-template nach Wenn es herauskommt, müssen Sie nicht mehr nur eine ID übergeben und diese in mehrere Parameter aufteilen! Glücklich!

    // app.js
    App({
      onLaunch: function(e) {
        // 注册 storage,这是第二条
        wx.Storage = Storage;
        // 注册发布订阅模式
        wx.yue = Event;
      }
    });

    Hier ist etwas zu beachten: Gespeicherte Daten – Wörter mit Großbuchstaben => werden einheitlich in Kleinbuchstaben umgewandelt, zum Beispiel: data-orderId = „2a34fb64a13211e8a0f00050568b2fdd“, wenn der tatsächliche Wert this.dataset.orderid ;<blockquote><h3>event</h3></blockquote>Da dies verwendet werden kann, ist die Methode <code>event.target auch im Ereignis verfügbar:
    • Erhalten Sie den aktuellen Indexwert und die Parameter entsprechend Die Klasse kann ein Ereignisobjekt sein Komplexe Parameterübergabe
      // 添加收货地址页面订阅
       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");
      }
    • 8.arguments

    arguments-Objekte sind lokale Variablen, die in allen (Nicht-Pfeil-)Funktionen verfügbar sind. Sie können die Parameter einer Funktion innerhalb einer Funktion mithilfe des Arguments-Objekts referenzieren. Es ist ein Array-ähnliches Objekt.

      Mit der form-Form übergibt Ajax Serialisierungsparameter
    • rrreee
    • Chestnut:
    rrreeerrreee
    10. Veröffentlichen und abonnieren, um die Übertragung komplexer Logikparameter abzuwickeln
    Unterstützt zuerst das Abonnieren und dann das Veröffentlichen und das Veröffentlichen zuerst dann abonnieren🎜🎜 🎜Methodenquellcode🎜🎜rrreee🎜Beispiele für die Verwendung in WeChat-Miniprogrammen: 🎜🎜🎜Globale Mount-Verwendung 🎜🎜rrreee🎜🎜Verwendungsbeispiele🎜🎜rrreeerrree🎜Hinweis: Achten Sie auf die Deinstallation ing nach der verwendung der daten, und bedienen wenn die Seite ist geschlossen 🎜🎜

    Das obige ist der detaillierte Inhalt vonSo übergeben Sie Parameter in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn