2011-10-13 32 views
5

Para mi aplicación asp.net mvc 3 estoy usando this plugin. Pero tengo un problema, quiero activar o desactivar algunos elementos de menú, después de haber creado el menú, como:menú contextual jquery desactivar elementos de menú

<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> 

No funciona, alguna idea?

Respuesta

12

De acuerdo con el complemento documentation, puede especificar una función que se llamará para determinar si un elemento de menú está desactivado o no.

Por lo tanto, puede tener esa función cerca de una variable local y actualizar esa variable para habilitar o deshabilitar los elementos. Algo como:

$(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

excelente, ¡funciona! – iknowitwasyoufredo

+3

A propósito, descubrí que para ocultar un elemento y no solo deshabilitarlo, puede usar la opción "visible" en lugar de "deshabilitada". La definición se realiza de la misma manera, excepto por el hecho de que la función en "visible" se ejecuta dos veces y en la primera ejecución, los parámetros no se devuelven. Entonces deberá verificar primero si el "$ trigger" devuelve algo y luego ejecutar el código necesario en esta función. – TheCuBeMan

+0

@TheCuBeMan ¡podría haber sido bueno si hubieran mencionado eso en la documentación! https://swisnl.github.io/jQuery-contextMenu/docs/items.html#visible –

Cuestiones relacionadas