2012-09-28 105 views
1

我有一个jquery函数来显示右键单击事件的菜单。 我希望从callback函数内的父函数访问一个对象。访问javascript变量范围之外的jquery函数

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

回答

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

我不知道.contextMenu()方法(也许你可以指向我们的网址),但似乎上下文菜单只为.Container添加一次(!),并且对于每个后续调用,它都会返回(因为上下文菜单已存在.Container)。这只是一个受过教育的猜测。

+0

我已经加入了jQuery插件的链接问题。 – DarkKnightFan