如何根据条件动态更改上下文菜单中的名称

How to change name in context menu dynamicaly by a condition

我正在为 jQuery 使用此上下文菜单插件:

http://swisnl.github.io/jQuery-contextMenu/demo/trigger-left-click.html.

我正在尝试通过一个简单的条件动态更改菜单项的名称。不幸的是,无法动态更改菜单项的名称,或者我不知道该怎么做...

我这样试过:

   items: {
           "item": {name: (x > 10) ? 'name1' : 'name2', disabled: false},
           "sep1": "----------------",
           ....
   }

但它不起作用。 然后我用匿名函数试了一下:

 items: {
         "item": {name: function(){ return (x > 10) ? 'name1' : 'name2'; }, disabled: false},
         "sep1": "----------------",
         ....
 }

但效果不佳... 现在我没有其他线索,所以我向你求助。 你对我有什么有用的建议吗? 感谢任何帮助。

提前致谢。

名称会在开头定义,不是每次点击。如果你想每次都重新定义项目名称,你应该这样做:

var x = 0;
$(function() {
  $.contextMenu({
    selector: '.context-menu-one', 
    callback: function(key, options) {
      var m = "clicked: " + key;
    },
    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: function(){
        return 'icon icon-quit';
      }}
    }
  });

  $('.context-menu-one').on('contextmenu', function(e){
    $('.icon-edit span').text('x: ' + x);
    x++;
  });    
});
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.js"></script>
<script src="http://swisnl.github.io/jQuery-contextMenu/dist/jquery.contextMenu.min.js"></script>
  <link rel="stylesheet" href="http://swisnl.github.io/jQuery-contextMenu/dist/jquery.contextMenu.min.css">
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
<span class="context-menu-one btn btn-neutral">right click me</span>
</body>
</html>

我认为你应该使用构建选项。这使得在运行时构建菜单成为可能,因此它可以在显示菜单之前评估表达式。

http://swisnl.github.io/jQuery-contextMenu/docs.html#build

$.contextMenu({
selector: 'span.context-menu',
build: function($triggerElement, e){
    var conditionalName = (x > 10) ? 'name1' : 'name2';
    return {
        callback: function(){},
        items: {
            menuItem: {name: conditionalName}
        }
    };
}

});