我有一个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
正确地给出了不同的值,内部回调函数仍然显示与第一次相同的旧值。
答案 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"}
}
});
}