JavaScript Rechtsklick, Kontextmenü und FireFox

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
Moin moin !
Ich arbeite gerade an einem eigenen Kontext Menü in JavaScript. Das problem ist das es nur an bestimmten Stellen im Programm auftauchen soll.

In Chrome gibt es dafür den eventhandler oncontextmenu.
In FF scheint es den auch zu geben, jedenfalls zeigt firebug ihn mir an, aber er tut nichts!

so soll es aussehen: http://www.youtube.com/watch?v=PJis70FEzaA (nicht wundern das war eine präsentation für den kunden)

nun meine frage: wie kann ich das in FF lösen ?

Konkret sieht es zurzeit so aus das jede Zelle den handler oncontextmenu hat.
Habe versucht es mit onmousedown zu lösen und wollte dann, wenn die rechte Maustaste gedrückt wird, das mein eigenes Menü angezeigt wird. Leider zeigt sowohl Chrome als auch FF dann trotzdem noch das normale Kontextmenü an, was ich an dieser Stelle absolut unterbinden will. hab schon e.stopPropagation(); und e.preventDefault(); versucht. Auch habe ich versucht beim aufrufen den normalen eventhandler für onmousedown von document zu überschreiben, allerdings erst wenn die besagte Methode aufgerufen wird, was offensichtlich zu spät ist da dass Event schon gestartet wurde. Ich kann es aber auch nicht global deaktivieren da es sonst durchaus sinnvoll ist, nur in dieser einen table soll es nicht angezeigt werden.
Ich verzweifle :-/

Danke schonmal im voraus, ich erwarte auch keine Lösung sondern bin für jeden Tipp dankbar :)
 

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
In meiner Web-Anwendung hab ich einfach in der oncontextmenu Methode e.preventDefault ausgeführt. Bei mir klappt es dann auch in Firefox.
Kann es evtl sein, dass du den EventHandler auf das falsche Element gesetzt hast? Ich würde ihn auf die Tabelle setzen und dann mit e.target schauen, welches Kästchen gewählt ist.
 

mercsen

Lt. Commander
Ersteller dieses Themas
Dabei seit
Apr. 2010
Beiträge
1.641
Diese möglichkeit werde ich mal im hinterkopfbehalten, allerdings gefällt mir die nicht so gut, denn es muss zudem noch ein tag, monat und ein jahr übergeben werden, um im hintergrund den status in die DB einzutragen. Mir das alles raus zu suchen erscheint mir ein wenig umständlich.
e.preventDefault() funktioniert leider weder in chrome 11 noch in FF 4 :-/
 

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
Also ich hab mal ein Test-Skript gebaut:
Code:
<html>
<script>
window.onload = function(e)
{
    var x = document.getElementById("meineTable");
    x.oncontextmenu = function(e)
    {
        e.preventDefault();
    };
};
</script>
<body>

<table id="meineTable">
    <tr><td>Test</td></td>
</table>

</body></html>
Wenn ich im Firefox rechtsklicke auf 'Test', kommt kein Kontext-Menü. In Chrome auch nicht. Und auch wenn ich es nicht auf die Table, sondern auf das <td> anwende, geht es.
 

mercsen

Lt. Commander
Ersteller dieses Themas
Dabei seit
Apr. 2010
Beiträge
1.641
Ja ich verstehe es nicht, zuerst dachte ich es geht bei dir weil du die funktion per JS zuordnest. Chrome ist das egal, aber in FF geht folgendes z.b. nicht:

Code:
<html>
<script>
window.onload = function(e)
{
    var x = document.getElementById("meineTable");
    x.oncontextmenu = function(e)
    {
        e.preventDefault();
        //alert("test2");
    }; 
};

function bla() {
    event.preventDefault();
    //alert("test");
}
</script>
<body>

<table id="meineTable" border="1">
    <tr><td >Test</td></tr>
</table>

    <table border="1">
    <tr><td oncontextmenu="bla()">Test</td></tr>
</table>

</body></html>

in der zweiten table zeigt er dann nach wie vor das kontextmenü an.
Und ich kann unmöglich immer alle tables mit JS dem event zuordnen, dafür wechselt der inhalt zu stark da alles per JS nachgeladen wird und es um ein Planungstool für Mitarbeiter geht, konkret um den Mitarbeiter kalender der immer neben dem Programm gezeigt wird und beim wechsel der Mitarbeiter natürlich neugeladen werden muss.....

Ich tendiere ehr dazu FF aus der Spezifikation zu streichen (im vertrag garantiere ich nur eine lauffähigkeit für Chrome) denn dieser ganze Mist geht mir auf den keks!

Wenn ich mir den verlauf in FireBug anschaue sehe ich ja eine Event Sequenz. Er springt rein, zeigt mir an das nun mein code ausgeführt werden sollte aber tut es nicht, sondern beendet die Sequenz einfach :-/

oder liegt es daran das ich kein event objekt übergebe? Wenn ja wie mache ich das denn aus HTML heraus?

edit: ok bei dieser kleinen funktion geht er in bla() rein, aber zeigt denoch das context menü.
bald bastle ich das ganze programm zu Java um :p

edit2:
is doch zum mäuse melken! Ich wundere mich wieso ich kein event objekt aus html übergeben kann aber hatte nen tipp fehler drinne, nu scheints zu gehen

edit3:
Danke dir! :)
 
Zuletzt bearbeitet:

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
Du musst in der bla Funktion auch event als Parameter einfügen. Also "function bla(event) { ... }".
 

mercsen

Lt. Commander
Ersteller dieses Themas
Dabei seit
Apr. 2010
Beiträge
1.641
Wie gesagt nu läufts, zuerst dachte ich das globale event objekt tuts auch und dann hatte ich evnet übergeben.........

Nochmal danke und Thema kann meinetwegen zu :)
 
Top