2012-04-04 4 views
2

Ich füge in meiner ASP.NET App an eine Zelle oncontextmenu eine Funktion string.Format("OnCellContextMenu({0}, '{1}', true, true)", e.VisibleIndex, e.DataColumn.FieldName).Javascript Ereignisse in Firefox und IE9

In meinem JS i definieren die folgende Funktion.

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)); 
} 

nun auf IE arbeitet properlly, aber auf Firefox window.event.returnValue = false; es wird nicht ausgeführt. Ich googeln um zu sehen, wie der Firefox diesen Rückgabewert behandelt und ich habe, dass ich e.preventDefault(); insdead von window.event nennen sollte. Das Problem ist, dass in meiner Funktion e nicht definiert ist.

Können Sie mir bitte helfen, eine Lösung zu finden, die sowohl auf FF und IE funktioniert?

Dank

+0

Was erwartest du zu passieren? – Jivings

+0

Verhindern Sie das Browser-Menü mit der rechten Maustaste und zeigen Sie meine eigenen. – MaiOM

+0

verwenden Sie dies. if (window.event.preventDefault) {window.event.preventDefault(); } – Ramesh

Antwort

0

ich meinen Weg herausgefunden.

erklärte ich eine Funktion auf diese Weise:

function OnCellContextMenu(e, visibleIndex, fieldName, hasNote, hasValue) 

und den Verein auf diese Weise:

e.Cell.Attributes.Add("oncontextmenu", string.Format("OnCellContextMenu(event, {0}, '{1}', true, true)", e.VisibleIndex, e.DataColumn.FieldName)); 

dann in der Funktion I var currentEvent = (window.event) ? window.event : e; bekam und verwendet currentEvent über andere Funktion aufruft, wie ASPxClientUtils.PreventEventAndBubble(currentEvent);

Prost

1

Sie können den Code Refactoring jQuery zu verwenden, die Z. B in allen Browsern funktioniert:

$('body').bind('contextmenu', function(e) { 
    //Stop browser from opening context menu 
    e.preventDefault(); 
    //Do more stuff 
}); 
+0

Es wird schön sein, aber ich bin mit dem Devxpress Gridview und ich bin Einstellung Attribut auf eine Gitterzelle in einer bestimmten Art und Weise oncontextmenu. Innerhalb Gitter Server Side Event HtmlDataCellPrepared Ich mache folgendes: e.Cell.Attributes.Add ("oncontextmenu", string.Format ("OnCellContextMenu ({0}, '{1}', true, true)", e. VisibleIndex, e.DataColumn.FieldName)); – MaiOM