0

我有一个 JavaScript 函数,每次单击多个链接之一时都会运行该函数。这些函数首先检查单击的链接的 id 是什么,然后运行 ​​if stement。根据链接的 id,定义不同的变量。

所有这些都有效,但问题是一些链接定义了一个变量,而其他链接定义了另一个,我需要保留在函数的其他执行中定义的函数的先前执行中定义的变量。

一个例子如下:

$(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

在函数外部创建 var submit 和 view,使其具有全局范围。

于 2013-02-08T01:24:05.740 回答
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 回答