2012-09-28 155 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