1

下面代码中的 pastPath 变量让我感到困惑。我通常使用 C# 和 MVC,这当然意味着我使用 HTML、JavaScript 和 JQuery 以及其他相关的 Web/移动技术。

当我运行此代码并单击 .moreBtn pastPath 报告时,它会按照我的意图设置为 URL。然而,当我尝试使用 .backBtn 来设置 URL 并强制我的浏览器返回上一页时,我得到的不是过去路径未定义,或者它被设置为 hello。

我知道我在这里理解范围有问题。我已阅读有关 JavaScript 范围的文章,但我想知道是否有人可以解决此问题并解释我如何将我的 URL 从第一个函数获取到第二个函数。

稍后我将详细了解 JavaScript 中的范围,但它似乎与大多数其他语言中的范围非常不同,我目前没有时间正确研究它。

$(document).ready(function ()
{
    pastPath = "hello";

    $(".moreBtn").click(function ()
    {
        var controller = $(".moreBtn").data('ctrl');
        var action = $(".moreBtn").data('action');
        loc = GetPathDetails("full"); //This simply returns the part of the URL I need.
        pastPath = loc;
        alert(pastPath);
        var fullPath = loc + "/" + controller + "/" + action;
        window.location = fullPath;
    });

    $(".backBtn").click(function ()
    {
        alert(pastPath);
        //window.location = pastPath;
    });

});

谢谢你的帮助。

4

4 回答 4

4

单击 .moreBtn 会更改页面,因此您存储在 pastPath 中的任何数据都将丢失。

看看 dom 存储,https://developer.mozilla.org/en-US/docs/DOM/Storage

于 2013-01-25T10:42:11.600 回答
1
  • 当您使用 jQuery 时,在单击(或其他事件)处理程序中时,“this”将引用触发事件的 DOM 元素。

  • 如果你不使用“var pastPath”声明你的变量,那么 pastPath 将是一个“全局变量”,这意味着它将是全局对象的一个​​属性。

this.pastPath在您的点击处理程序中,无论您正在访问还是只是访问,您都不会访问相同的变量pastPath(除非this引用全局对象,因为它是由 jQuery 在您单击的特定 DOM 元素上触发的)。

于 2013-01-25T10:42:35.740 回答
1

当您单击 $(".moreBtn") 时,它会将您重定向到fullpath并且此重定向再次设置 pastPath = "hello",因此如果您想要下一页上的过去路径值,请将其作为查询字符串发送,然后将其用于您的后退按钮。

就像是 :

    $(document).ready(function ()
    {
       var pastPath = "hello";

        $(".moreBtn").click(function ()
        {
        var controller = $(".moreBtn").data('ctrl');
        var action = $(".moreBtn").data('action');
        loc = GetPathDetails("full"); //This simply returns the part of the URL I need.
        pastPath = loc;
        alert(this.pastPath);
        var fullPath = loc + "/" + controller + "/" + action + " ?pastpath="+loc;
        window.location = fullPath;
        });

        $(".backBtn").click(function ()
        {
                   var path = window.location + ''.split('pathname=');
                   alert(path1[1]);
                });

    });
于 2013-01-25T11:13:24.143 回答
0

众所周知,变量有两个作用域,即局部作用域和全局作用域。

全局范围:在函数外部以简单的术语(但不完全是)声明或定义的变量。

局部范围:在函数内部声明的变量。

所以 $(document).ready(function (){}); 也是一个函数,因此在此之外声明变量将解决问题。但避免在函数中使用 var pastPath ,这可能反过来将该变量用作局部变量。

所以你的最终代码将变成 var pastPath = "hello"; $(文档).ready(函数() {

$(".moreBtn").click(function() {
    var controller = $(".moreBtn").data('ctrl');
    var action = $(".moreBtn").data('action');
    loc = GetPathDetails("full");
    //This simply returns the part of the URL I need.
    pastPath = loc;
    alert(pastPath);
    var fullPath = loc + "/" + controller + "/" + action;
    window.location = fullPath;
});

$(".backBtn").click(function() {
    alert(pastPath);
    //window.location = pastPath;
});

});

于 2013-01-25T10:47:13.423 回答