2

我有一個包含項目的DataGrid。當您右鍵單擊其中一行時,會顯示一個Dojo上下文菜單,並帶有刪除該行的選項。如果您嘗試右鍵單擊DataGrid的空白區域,則不會顯示上下文菜單....但是,如果您先右鍵單擊一行,然後單擊取消菜單選項(不執行任何操作),或者如果您左鍵單擊頁面上的其他位置(隱藏上下文菜單),然後右鍵單擊DataGrid的空白區域,顯示上下文菜單IS,如果單擊上下文菜單中的刪除項目選項,它將刪除您右鍵單擊的最後一個項目。Dojo DataGrid上下文菜單onRowContextMenu即使在DataGrid的空白區域中右鍵單擊時也會顯示

爲什麼允許它的上下文菜單顯示,當你在一個空白區域的DataGrid但只有你已經正確點擊DataGrid中的一個項目右擊?

任何提示將不勝感激。這裏是我的代碼到目前爲止:

var selectedItem; // This has to be declared "globally" outside of any functions 

function onRowContextMenuFunc(e) { 
    grid5_rowMenu.bindDomNode(e.grid.domNode); 
    selectedItem = e.grid.getItem(e.rowIndex); 
} 

function gridRowContextMenu_onClick(e) { 
    store3.deleteItem(selectedItem); 
} 

<div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;"> 
    <div dojoType="dijit.MenuItem" onClick="gridRowContextMenu_onClick">Delete</div> 
    <div dojoType="dijit.MenuItem">Cancel</div> 
</div> 

<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenuFunc"></div> 

回答

3

嗯,我不知道是什麼原因它允許上下文菜單顯示時右擊一個空白區域後,才第一次右鍵點擊某個項目,但我沒有拿出一個解決辦法來解決我的根本問題:右鍵單擊數據網格中的行項目,然後單擊以隱藏上下文菜單,然後右鍵單擊數據網格的空白區域並選擇菜單項會導致第一次右鍵單擊的rowIndex要通過

這是我的代碼;我希望這有助於任何人在未來有同樣的問題:

var selectedItem; 

function onRowContextMenu(e) { 
     grid5_rowMenu.bindDomNode(e.grid.domNode); 
     selectedItem = e.grid.getItem(e.rowIndex); 
} 

function gridRowContextMenuExecute(task) { 
     if((task == "remove") && (selectedItem != null)) { 
      store3.deleteItem(selectedItem); 
     } 
     else { 
      selectedItem = null; 
     } 
} 

<div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;" onBlur="gridRowContextMenuExecute('cancel')"> 
     <div dojoType="dijit.MenuItem" onMouseDown="gridRowContextMenuExecute('remove')">Remove from Transaction</div> 
     <div dojoType="dijit.MenuItem">Cancel</div> 
</div> 

<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenu"></div> 
0

grid5_rowMenu是菜單。

exceptionsrid.domNode是數據網格的DOM節點。

* grid5_rowMenu.bindDomNode(e.grid.domNode); *

它是:給上下文菜單到電網(DOM的節點內的任何地方)。

因爲datagrid中的內容總是變化,所以將菜單分配給網格內的元素並不容易。

如果電網不改變它的內容,你可以這樣做: * grid5_rowMenu.bindDomNode(e.target.parentElement); *

相關問題