我在ASP.NET应用程序中附加到单元格oncontextmenu
函数string.Format("OnCellContextMenu({0}, '{1}', true, true)", e.VisibleIndex, e.DataColumn.FieldName)
。
在我的JS中,我定义了以下函数。
function OnCellContextMenu(visibleIndex, fieldName, hasNote, hasValue) {
currentVisibleIndex = visibleIndex;
currentFieldName = fieldName;
if (fieldName == "Name" || fieldName == "TOTAL") {
EnableMenuItem('AddNote', false);
EnableMenuItem('EditNote', false);
EnableMenuItem('RemoveNote', false);
}
else {
EnableMenuItem('AddNote', !hasNote && hasValue);
EnableMenuItem('EditNote', hasNote);
EnableMenuItem('RemoveNote', hasNote);
}
window.event.returnValue = false;
gvPrevisions.SetFocusedRowIndex(visibleIndex);
GridMenu.ShowAtPos(ASPxClientUtils.GetEventX(event), ASPxClientUtils.GetEventY(event));
}
现在,在IE上运行正常,但在Firefox window.event.returnValue = false;
上
它没有被执行。我用谷歌搜索看看Firefox如何处理这个返回值,我知道我应该调用e.preventDefault();
insdead of window.event。问题是我的函数e
未定义。
你能帮我找一个适用于FF和IE的解决方案吗?
由于
答案 0 :(得分:1)
您可以重构代码以使用jQuery,它适用于所有浏览器E.g:
$('body').bind('contextmenu', function(e) {
//Stop browser from opening context menu
e.preventDefault();
//Do more stuff
});
答案 1 :(得分:0)
我找到了出路。
我用这种方式声明了一个函数:
function OnCellContextMenu(e, visibleIndex, fieldName, hasNote, hasValue)
以这种方式结合:
e.Cell.Attributes.Add("oncontextmenu", string.Format("OnCellContextMenu(event, {0}, '{1}', true, true)", e.VisibleIndex, e.DataColumn.FieldName));
然后在我得到的函数中var currentEvent = (window.event) ? window.event : e;
并在currentEvent
ASPxClientUtils.PreventEventAndBubble(currentEvent);
干杯