2011-10-13 59 views
5

對於我的asp.net mvc 3應用程序,我使用的是this plugin。但我有一個問題,我想啓用或禁用一些菜單項,我創建了菜單後,如:jquery上下文菜單禁用菜單項

<script type="text/javascript"> 
    $(function(){ 
     /************************************************** 
     * Menu 1 
     **************************************************/ 
     $.contextMenu({selector: '.context-menu-one', items: { 
      edit: {name: "Edit", icon: "edit", callback: $.noop, accesskey:"e d i t"}, 
      cut: {name: "Cut", icon: "cut", callback: $.noop, accesskey:"c u t"}, 
      copy: {name: "Copy", icon: "copy", callback: $.noop, accesskey:"c o p y"}, 
      paste: {name: "Paste", icon: "paste", callback: $.noop, accesskey:"p a s t e"}, 
      "delete": {name: "Delete", icon: "delete", callback: $.noop, accesskey:"d e l t"}, 
      sep1: "---------", 
      quit: {name: "Quit", icon: "quit", callback: $.noop, accesskey:"q u i t"} 
     }}); 

     //not working 
     $('.context-menu-one').contextMenu('commands[0].disabled','true'); 
     }); 

    </script> 

不工作,任何想法?

回答

12

根據插件的documentation,您可以指定要調用的函數,以確定菜單項是否被禁用。

因此,您可以將該函數關閉一個局部變量,並更新該變量以啓用或禁用項目。例如:

$(function() { 
    var itemsDisabled = {}; // Enable everything initially. 
    $.contextMenu({ 
     selector: ".context-menu-one", 
     items: { 
      // [...] 
      cut: { 
       name: "Cut", 
       icon: "cut", 
       callback: $.noop, 
       accesskey: "c u t", 
       disabled: function(key, opt) { 
        return !!itemsDisabled[key]; 
       } 
      } 
      // [...] 
     } 
    }); 

    // Disable the "Cut" menu item. 
    itemsDisabled["cut"] = true; 
}); 
+1

優秀,它的作品! – iknowitwasyoufredo

+3

順便說一句,我發現,爲了隱藏一個項目,而不僅僅是禁用它,你可以使用「可見」選項而不是「禁用」。定義以相同的方式完成,除了「visible」下的函數運行兩次並且在第一次運行中,參數不返回。所以你必須先檢查「$ trigger」是否返回任何內容,然後在這個函數中運行所需的代碼。 – TheCuBeMan

+0

@ TheCuBeMan如果他們在文檔中提到它可能會很好! https://swisnl.github.io/jQuery-contextMenu/docs/items.html#visible –