我想用jquery右鍵菜單來增強我的頁面,但是在構建正確的結構時很容易出現問題。在jquery中的對象的Javascript語法
當前我的頁面包含(除其他外)供用戶審閱的項目列表。 (一個html表格)根據用戶角色以及行的當前狀態和上下文,用戶可以對每行數據採取各種操作之一。 (批准,拒絕,把它轉給其他人等)。如果該選項可用,我的ASP.Net頁面通過將該行內的圖像按鈕的可見性設置爲true來處理此問題。我可以控制每個按鈕的Cssclass,並將例如「批准」按鈕的類設置爲「approvebtn」。
現在我想用正確的菜單來增強我的網站。 我在擴大我的網站與Cory S.N. LaViska的jQuery上下文菜單插件 - http://abeautifulsite.net/notebook/80
該插件允許任何元素的默認鼠標行爲被用戶控制的上下文菜單覆蓋。該菜單作爲無序列表插入到您的頁面中,並在需要時顯示。
<ul id="rightMenu" class="contextMenu">
<li class="details"><a href="#details">Details</a> </li>
<li class="addnote"><a href="#addnote">AddNote</a> </li>
<li class="listnote"><a href="#listnote">ShowNotes</a> </li>
<li class="approve"><a href="#approve">Approve</a> </li>
<li class="reject"><a href="#reject">Reject</a> </li>
<li class="release"><a href="#release">Release</a> </li>
<li class="takeover"><a href="#takeover">Takeover</a> </li>
</ul>
您的應用程序得到一個回調點擊右鍵菜單上的東西時,你可以詢問操作(僞造的href元素)看是哪個項目。 我真的很喜歡這個菜單,因爲它使用簡單,完全是CSS風格。
但是,我需要做的事情,這個插件不天真似乎支持。我需要在行中更改菜單上的哪些項目可用。基本上,如果圖像按鈕(用於批准)在該行中可用,則其對應的菜單項也應存在。
我能夠訪問之前它是通過改變插件咯,打電話給我的功能顯示在右鍵菜單之前顯示的菜單。 這是有效的,但我必須寫的邏輯看起來非常強悍,所以必須有更好的方式......。
在我的回調:
function jimsbuggeredfunction(menu,el)
「厄爾尼諾」是被右擊的元素(通常是一個表格單元格),和「菜單」是這個右鍵勢必菜單。 (所以我應該使用這個名稱,而不是硬編碼到#rightMenu')
因此,「if」行會發現包含「右鍵單擊」元素的錶行是否包含特定按鈕(通過它的類名稱)如果它啓用了菜單項,否則它被禁用。這個過程繼續爲每一個我想成爲行對行的菜單項。
function jimsbuggeredfunction(menu,el) {
if($(el).parents("tr:eq(0)").find('.approvebtn').length > 0)
$('#rightMenu').enableContextMenuItems('#approve');
else
$('#rightMenu').disableContextMenuItems('#approve');
if($(el).parents("tr:eq(0)").find('.rejectbtn').length > 0)
$('#rightMenu').enableContextMenuItems('#reject');
else
$('#rightMenu').disableContextMenuItems('#reject');
if($(el).parents("tr:eq(0)").find('.releasebtn').length > 0)
$('#rightMenu').enableContextMenuItems('#release');
else
$('#rightMenu').disableContextMenuItems('#release');
if($(el).parents("tr:eq(0)").find('.takeoverbtn').length > 0)
$('#rightMenu').enableContextMenuItems('#takeover');
else
$('#rightMenu').disableContextMenuItems('#takeover');
if($(el).parents("tr:eq(0)").find('.revertbtn').length > 0)
$('#rightMenu').enableContextMenuItems('#revert');
else
$('#rightMenu').disableContextMenuItems('#revert');
if($(el).parents("tr:eq(0)").find('.removebtn').length > 0)
$('#rightMenu').enableContextMenuItems('#remove');
else
$('#rightMenu').disableContextMenuItems('#remove');
if($(el).parents("tr:eq(0)").find('.addnotebtn').length > 0)
$('#rightMenu').enableContextMenuItems('#addnote');
else
$('#rightMenu').disableContextMenuItems('#addnote');
if($(el).parents("tr:eq(0)").find('.listnotebtn').length > 0)
$('#rightMenu').enableContextMenuItems('#listnote');
else
$('#rightMenu').disableContextMenuItems('#listnote');
};
必須有一個更好的方式來設置的,因此,它也只是忽略我要顯示所有的時間菜單項),但它是在瞬間逃離我。有沒有更好的方法來完成這一點?
感謝,
吉姆