1

以下のコードの pastPath 変数は、私を混乱させます。私は通常、C# と MVC を使用します。これはもちろん、HTML、JavaScript、および JQuery を他の関連する Web/モバイル テクノロジと共に使用することを意味します。

このコードを実行して .moreBtn pastPath レポートをクリックすると、意図したとおりの URL に設定されます。しかし、.backBtn を使用して URL を設定し、ブラウザを強制的に前のページに戻そうとすると、pastPath が定義されていないか、hello に設定されています。

ここでスコープを理解するのに問題があることはわかっています。JavaScript スコープに関する記事を読みましたが、代わりに誰かがこの問題を解決し、最初の関数から 2 番目の関数に 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(クリックした特定の DOM 要素で jQuery によってトリガーされるため、グローバル オブジェクトを参照しpastPathない限り)。this

于 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

ご存知のように、変数にはローカル スコープとグローバル スコープの 2 つのスコープがあります。

グローバル スコープ : 関数の外部で簡単に宣言または定義された変数 (正確ではありません)。

ローカル スコープ : 関数内で宣言される変数。

だから $(document).ready(function (){}); も関数なので、これの外側で変数を宣言すると問題が解決します。ただし、その変数をローカル変数として使用する可能性のある関数内の var pastPath は避けてください。

したがって、最終的なコードは var pastPath = "hello"; になります。$(document).ready(function() {

$(".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 に答える