ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScriptでパラメータを渡す方法

JavaScriptでパラメータを渡す方法

藏色散人
リリース: 2021-06-27 10:26:32
オリジナル
6503 人が閲覧しました

JavaScript でパラメータを渡す方法: まず、対応する js ファイルを作成し、次に「functionalertInfo(name, age, home, friends) {...}」を通じてパラメータを渡します。

JavaScriptでパラメータを渡す方法

この記事の動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript でパラメータを渡すにはどうすればよいですか?

JS パラメータ受け渡しスキルの概要

1. HTML タグの暗黙的な作成

<input type="hidden" name="tc_id" value="{{tc_id}}">
ログイン後にコピー
このメソッドは通常、ajax で使用され、上記の値はEngine

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 無制限
毎回ヘッダーに組み込まれ、影響を与えますリクエストのパフォーマンス 参加しません 参加しません 参加しません
cookie

はストレージとして推奨されなくなりました。大規模なデータ ストレージ要件がない場合は、localStorage および sessionStorage を使用できます。あまり変更のないデータの場合は、localStorage を使用して保存してください。そうでない場合は、sessionStorage を使用して保存してください。 注:

object
型のデータを保存する場合、このディープ コピー メソッドは関数と unknown<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">var obj = {   type: undefined,   text: &quot;xiaoyueyue&quot;,   methord: function() {     alert(&quot;I am an methord&quot;);   } }; localStorage.setItem(&quot;data&quot;, JSON.stringify(obj)); console.log(JSON.parse(localStorage.getItem(&quot;data&quot;))); // {text: &quot;xiaoyueyue&quot;}</pre><div class="contentsignin">ログイン後にコピー</div></div>4 を無視します。アドレス バーの取得メソッド

独自のカプセル化メソッド
  1. 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. 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.タグ バインディング関数のパラメータ渡し

<!--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>
ログイン後にコピー

この拡張機能

これを使用してパラメータを渡します。art-template を使用しているときにそれを理解しました。ID を 1 つだけ渡して、それを複数のパラメータに結合する必要はもうありません。ハッピー!

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 +
      " !"
  );
}
ログイン後にコピー

ここで注意すべき点が 1 つあります。保存されたデータは、大文字 => を含む単語は一律に小文字に変換されます。たとえば、実際の値が

this の場合、 data-orderId = “2a34fb64a13211e8a0f00050568b2fdd” です。 dataset.orderid
;event

これを使用できるため、

event.target

メソッドもイベントで使用できます: クラスに従って現在のインデックス値を取得します。パラメータはイベント オブジェクト

  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;
  },
ログイン後にコピー
6.HTML5 data-* カスタム属性
<button data-name="xiaoyueyue">点击</button>
ログイン後にコピー
var btn = document.querySelector("button");
btn.onclick = function() {
  alert(this.dataset.name);
};
ログイン後にコピー

7です。文字列パラメータの受け渡し

単一パラメータ

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 + "岁了!")
ログイン後にコピー

複雑なパラメータの受け渡し

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 + " 是我的好朋友");
}
ログイン後にコピー

8.arguments

arguments

オブジェクトはすべてです(矢印以外) 関数で使用できるローカル変数。引数オブジェクトを使用すると、関数内で関数のパラメーターを参照できます。配列のようなオブジェクトです。 [推奨学習:

JavaScript 上級チュートリアル

]

function fenpei() {
  var args = Array.prototype.slice.call(arguments);
  alert("我是" + args[2] + "油品,数量为 " + args[1] + " 吨, id为 " + args[0]);
}
ログイン後にコピー
9.form form

form

フォームを使用すると、 ajax はシーケンスを転送します。パラメータ化 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">// form表单序列化,摘自JS高程 function serialize(form) {   var parts = [],     field = null,     i,     len,     j,     optLen,     option,     optValue;   for (i = 0, len = form.elements.length; i &lt; len; i++) { field = form.elements[i]; switch (field.type) { case &quot;select-one&quot;: case &quot;select-multiple&quot;: if (field.name.length) { for (j = 0, optLen = field.options.length; j &lt; optLen; j++) { option = field.options[j]; if (option.selected) { optValue = &quot;&quot;; if (option.hasAttribute) { optValue = option.hasAttribute(&quot;value&quot;) ? option.value : option.text; } else { optValue = option.attributes[&quot;value&quot;].specified ? option.value : option.text; } parts.push( encodeURIComponent(field.name) + &quot;=&quot; + encodeURIComponent(optValue) ); } } } break; case undefined: //fieldset case &quot;file&quot;: //file input case &quot;submit&quot;: //submit button case &quot;reset&quot;: //reset button case &quot;button&quot;: //custom button break; case &quot;radio&quot;: //radio button case &quot;checkbox&quot;: //checkbox if (!field.checked) { break; } /* falls through */ default: //don&amp;#39;t include form fields without names if (field.name.length) { parts.push( encodeURIComponent(field.name) + &quot;=&quot; + encodeURIComponent(field.value) ); } } } return parts.join(&quot;&amp;&quot;); }</pre><div class="contentsignin">ログイン後にコピー</div></div> Chestnut:

<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>
ログイン後にコピー
document.querySelector("button").onclick = function() {
  console.log("param: " + serialize(document.getElementById("formData"))); // param: ordersaleCode=&extractType=0
};
ログイン後にコピー

10. 複雑なロジック パラメータ転送を処理するためのパブリッシュとサブスクライブ

最初にサブスクライブしてからパブリッシュする、最初にパブリッシュしてからパブリッシュすることをサポートします。 subscribe

メソッド ソース コード
  • 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
      };
    })();
    ログイン後にコピー
  • WeChat アプレットで使用される例:

グローバル マウント use
  • // 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);
    // 补充跳转返回
    ログイン後にコピー
  • 注: データ使用後のアンインストールには注意し、ページを閉じた状態で操作してください

以上がJavaScriptでパラメータを渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート