2012-10-12 28 views
1

我一直在通過這個插件的文檔,它看起來很有前途,但最終我無法知道我在找什麼。jQuery contextMenu基於div內容禁用項目

http://medialize.github.com/jQuery-contextMenu/docs.html

這是我想要的低谷例子,這個例子是上下文菜單項

$.contextMenu({ 
     selector: '.context-menu-one', 
     callback: function(key, options) { 
      var m = "clicked: " + key; 
      window.console && console.log(m) || alert(m); 
     }, 
     items: { 
      "item1": {name: "Clickable", icon: "edit"}, 
      "item2": { 
       name: "Disabled", 
       icon: "cut", 
       disabled: function(key, opt) { 
        // this references the trigger element 
        return !this.data('cutDisabled'); 
       } 
      } 
     } 
    }); 

的。如果我的div(context-menu-one)裏面有一些內容如<span class="test">x</span>禁用或啓用基於此的菜單。

因此,在上述情況下,如果我的DIV(context-menu-one)具有test類跨度有textvalue x禁用菜單ITEM2

如何將一個做到這一點?不必進行代碼,導致我好的方向=良好的代碼,如果有可能的話

編輯:

這裏的jsfiddle例如:

http://jsfiddle.net/XZEUN/2/

是因爲第一context-menu-one具有類x的範圍,item2應該被禁用,但不適用於其他類型

+0

你能堅持一個jsfiddle展示這個問題嗎? –

+0

當然這是一個完美的建議,它是http://jsfiddle.net/XZEUN/謝謝 –

+0

@ castillo.io感謝您的回覆。我想我只是修改了更新後的鏈接,使問題更容易理解。我不想添加關閉按鈕,'x'只是範圍的示例值。基於該值,我想禁用特定的菜單項 –

回答

1

你需要在這個fiddle

HTML

<div class="context-menu-one box menu-1"> 
    <strong>right click me</strong> 
    <span data-item="edit"></span> 
</div>​ 

來定義你自己喜歡的活動javascript

events: { 
    show: function(opt) { 
     var m = opt.$menu; 
     $(this).find('span[data-item]').each(function(i, e) { //<-- this search for all span with data-item attribute 
      var p = $(e).data('item') + 'Disabled'; //<-- here i compose editDisabled 
      if (m.data(p) === true) m.data(p, 1); //<-- this is for mantain previuos disabling 
      else m.data(p, true); 
     }); 
     m = null; //<-- this for breaking possible circular references/memory leaks 
    }, 
    hide: function(opt) { 
     var m = opt.$menu; 
     $(this).find('span[data-item]').each(function(i, e) { 
      var p = $(e).data('item') + 'Disabled'; 
      if (m.data(p) === 1) m.data(p, true); //<-- this reset the previuos disabling 
      else m.removeData(p); 
     }); 
     m = null; 
    } 
} 
+1

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

謝謝@hayden,我只是在編輯答案...:P –

0

如果要禁用綁定到特定選擇器的上下文菜單ü可以做這樣的事情:

$.contextMenu('destroy', '.context-menu-one'); 

見這裏的例子:

http://jsfiddle.net/ATyjn/