0

多くのリンクの 1 つがクリックされるたびに実行される JavaScript 関数があります。この関数は、最初にクリックされたリンクの ID を確認し、次に if ステムを実行します。リンクの ID に応じて、さまざまな変数が定義されます。

これはすべて機能しますが、問題は、一部のリンクが1つの変数を定義し、他のリンクが別の変数を定義することです.関数の他の実行のために定義された関数の以前の実行で定義された変数を保持する必要があります.

以下に例を示します。

$(document).ready(function()
{
  $(".sidebar a").click(function(event) {
    event.preventDefault()
    var targetID = $(this).attr("data-target")
    $("#" + targetID).attr("src", $(this).attr("href"))
    var element = $(this).attr("class")
    if (element == "submit") {
      var submit = $(this).attr("user")
      alert("1")
    } else if (element == "view") {
      var view = $(this).attr("user")
      alert("2")
    }
  })
  window.history.replaceState({}, 'logs', '/file/path?submit=' + submit + '&' + 'view=' + view)
})

ありがとう

4

4 に答える 4

2

いくつかの変数を宣言して内部関数を返すだけの外部関数を使用できます。内部関数は、関数のすべての呼び出しで同じままである外部スコープから変数にアクセスできます。

var next = (function() {
    var value = 0;
    function next() {
        return value++;
    }
}());

console.log(next());
console.log(next());
console.log(next());

ライブデモ

http://jsfiddle.net/bikeshedder/UZKtE/

于 2013-02-08T01:33:20.777 に答える
1

外部スコープで変数を定義します。

$(document).ready(function () {
    var submit;
    var view;

    $(".sidebar a").click(function (event) {
        event.preventDefault();
        var targetID = $(this).attr("data-target");
        $("#" + targetID).attr("src", $(this).attr("href"));
        var element = $(this).attr("class")
        if (element == 'submit') {
            submit = $(this).attr("user")
            alert("1")
        } else if (element == 'view') {
            view = $(this).attr("user")
            alert("2")
        }
    });
});
于 2013-02-08T01:23:39.353 に答える
0

.data()JQueryの関数を使用して、一致した要素に任意のデータを格納できます。

例:

$(this).data("submit", $(this).attr("user")); // set a value

var submit = $(this).data("submit"); // retrieve a value

これにより、データはJQueryの要素に関する知識のコンテキストに配置されるため、関数呼び出し間、さらには異なるイベント間でもデータを共有できます。

于 2013-02-08T01:30:36.497 に答える
0

関数の外側に var submit と view を作成して、グローバル スコープを持つようにします。

于 2013-02-08T01:24:05.740 に答える