簡體   English   中英

訪問jQuery函數范圍之外的javascript變量

[英]access javascript variables outside the scope of a jquery function

我有一個jquery函數,以在右鍵單擊事件上顯示菜單。 我希望從callback函數內的父函數訪問對象。

我正在使用以下 JQuery插件來獲取上下文菜單。

這是代碼:

function OnContextMenu() {

     //alert(key + ' ' +this.Node.Content);
     var localNode = this.Node;
     alert(localNode.Content); //CORRECT NODE VALUE GETS ALERTED

        $.contextMenu({
            selector: '.Container', 
            callback: function(key, options) {
                var m = "clicked: " + key;
                 alert(localNode.Content); //ALWAYS PRINTS THE VALUE OF THE VERY FIRST NODE THAT WAS CLICKED. 
                // window.console && console.log(m) || alert(m); 
            },
            items: {
                "edit": {name: "Edit", icon: "edit"},
                "cut": {name: "Cut", icon: "cut"},
                "copy": {name: "Copy", icon: "copy"},
                "paste": {name: "Paste", icon: "paste"},
                "delete": {name: "Delete", icon: "delete"},
                "sep1": "---------",
                "quit": {name: "Quit", icon: "quit"}
            }
        });
    }

如您所見,我將值存儲在變量中:

var localNode = this.Node;

並在callback函數中使用此變量。 關於這個的奇特之處是, alert(localNode.Content); 第一次單擊菜單時,回調中的內部值會提供正確的值。 此后,即使外部函數的alert正確給出了不同的值,內部回調函數仍顯示與第一次相同的舊值。

我不知道.contextMenu()方法(也許您可以將我們指向一個URL),但似乎上下文菜單只為.Container添加了一次(!),對於隨后的每次調用都只會返回(因為.Container的上下文菜單已存在)。 這只是有根據的猜測。

現在感覺很愚蠢,因為我在這里錯過了一件非常簡單的事情。 我可以通過在函數外部聲明變量來解決此問題,就像使用全局變量一樣。

以下是更改:

 var localNode;

 function OnContextMenu() {

 //alert(key + ' ' +this.Node.Content);
 localNode = this.Node;
 alert(localNode.Content); //CORRECT NODE VALUE GETS ALERTED

    $.contextMenu({
        selector: '.Container', 
        callback: function(key, options) {
            var m = "clicked: " + key;
             alert(localNode.Content); //ALWAYS PRINTS THE VALUE OF THE VERY FIRST NODE THAT WAS CLICKED. 
            // window.console && console.log(m) || alert(m); 
        },
        items: {
            "edit": {name: "Edit", icon: "edit"},
            "cut": {name: "Cut", icon: "cut"},
            "copy": {name: "Copy", icon: "copy"},
            "paste": {name: "Paste", icon: "paste"},
            "delete": {name: "Delete", icon: "delete"},
            "sep1": "---------",
            "quit": {name: "Quit", icon: "quit"}
        }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM