访问jquery函数范围之外的javascript变量

时间:2012-09-28 05:35:51

标签: javascript jquery

我有一个jquery功能来显示右键单击事件的菜单。 我希望从callback函数中的父函数访问一个对象。

使用following 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正确地给出了不同的值,内部回调函数仍然显示与第一次相同的旧值。

2 个答案:

答案 0 :(得分:0)

我不知道.contextMenu()方法(也许您可以将我们指向一个URL),但似乎上下文菜单只为.Container添加一次(!)以及后续每个调用它只会返回(因为.Container已经存在上下文菜单)。这只是一个有根据的猜测。

答案 1 :(得分:0)

现在感觉非常愚蠢,因为我在这里错过了一件非常简单的事情。 我能够通过使用全局变量声明函数外部的变量来解决这个问题。

以下是更改:

 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"}
        }
    });
}