Rechte Maustaste auf Text
Daniel Bäuerlein
- javascript
0 twseiten_de0 Daniel Bäuerlein0 wahsaga0 twseiten_de4 Cybaer
0 Jonathan0 molily
Hallo,
ich bräuchte in meiner Page eine Funktion, die mir beim Anklicken eines Textes mit der rechten Maustaste eine Alert-Box ausgibt.
Wichtig ist, das diese Alert-Box wirklich nur geöffnet wird, wenn der Text angeklickt wurde (also nicht, wenn irgendwo in einen leeren Bereich geklickt wurde).
Es sollte möglichst in allen gängigen Browsern funktionieren.
Da ich natürlich kein fauler Webmaster bin hab ich natürlich auch schon selber rumprobiert und ein Script von SELFHTML als Basis genommen, bin jedoch kläglich gescheitert:
<script type="text/javascript">
function click (e) {
if (!e)
e = window.event;
if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3)) {
if (window.opera)
window.alert("Test!");
alert("Test!");
}
}
</script>
<a href="#" onmousedown="click()">Klick mich</a>
Kann mir da jemand weiterhelfen?
Vielen Dank schon mal für eure Unterstützung!
Viele Grüße
Daniel
Hallo,
Instanz opera soll ein Kind von window sein - der IE kennt das nicht.
Die Auswertung der logischen Bedingung
if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3))
in der der IE e.which nicht kennt, bedeutet zwingend, dass beim IE der Ausdruck nicht komplett abgearbeitet werden darf, sondern beim
1. ODER-Element bereits den if-zweig betritt. Was aber, wenn komplett abgearbeitet und dann betreten wird ?
Gruss Tom
Hi,
danke für deine Antwort.
Da ich leider noch nicht so´lange Javascript programmiere, komme ich damit irgendwie auch nicht weiter.
Hast du vielleicht nen Typ oder ein Beispiel-Script, wie man eine Alert Box beim Anklicken eines Textes mit der rechten Maustaste im firefox auslösen kann?
Oder besser gesagt in jedem gängigen Browser?
Gruß
Daniel
Hallo,
Instanz opera soll ein Kind von window sein - der IE kennt das nicht.
Die Auswertung der logischen Bedingung
if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3))
in der der IE e.which nicht kennt, bedeutet zwingend, dass beim IE der Ausdruck nicht komplett abgearbeitet werden darf, sondern beim
- ODER-Element bereits den if-zweig betritt. Was aber, wenn komplett abgearbeitet und dann betreten wird ?
Gruss Tom
hi,
Instanz opera soll ein Kind von window sein
Nein, opera soll eine Eigenschaft von window sein.
- der IE kennt das nicht.
Herzlichen Glückwunsch, du erkennst eine einfache Browserweiche, wenn du sie siehst.
Die Auswertung der logischen Bedingung
if ((e.type && e.type == "contextmenu") || (e.button && e.button == 2) || (e.which && e.which == 3))
in der der IE e.which nicht kennt, bedeutet zwingend, dass beim IE der Ausdruck nicht komplett abgearbeitet werden darf, sondern beim
- ODER-Element bereits den if-zweig betritt.
Der IE kennt sowohl event.type als auch event.button.
Die beiden ersten ODER-Ausdrücke liefern also schon mehr als genug (sprich: eine) Möglichkeit, den Gesamtausdruck wahr werden zu lassen.
Was aber, wenn komplett abgearbeitet und dann betreten wird ?
Und auf Deutsch?
gruß,
wahsaga
Hallo,
die Weiche window.opera wurde nirgends deklariert im Quellcode. Es muss damit eine Eigenschaft von window sein, die der IE nicht kennt.
Die Verwendung von Script als Mischung von Objekten divergenter Browser verbirgt Probleme. Es gibt User, die sich Scritpfehler anzeigen lassen z.B. wenn sie auf Bezüge aus nicht deklarierten (nicht vordefinierten) Variablen stammen.
Die Auswertung eines Ausdruckes als Ganzheit oder in Teilen ist ein typisches Compiler-Problem: Man teilt dem Compiler die gewünschte Variante mit. Bei Scritpmaschine geht dieses nicht, also ist die Reihenfolge des Codes enscheidend - besonders bei brwoserdivergenter
Programmierung.
Fazit: Browserdivergente Code nicht mischen.
Logische Ausdrücke vereinfacht programmieren um Transparenz
zu haben z.B. in den Unterschieden des event-Objektes der
Browser.
Tom.
Hi,
die Weiche window.opera wurde nirgends deklariert im Quellcode.
Muß auch nicht. Die, die sie kennen, wissen damit etwas anzufangen (Bedingung ist wahr), und ...
Es muss damit eine Eigenschaft von window sein, die der IE nicht kennt.
... die, die sie nicht kennen, eben nicht (Bedingung ist unwahr).
Das nennt man dann Browserweiche.
Die Verwendung von Script als Mischung von Objekten divergenter Browser verbirgt Probleme.
Ja, dafür sind Browserweichen üblicherweise auch gedacht.
Es gibt User, die sich Scritpfehler anzeigen lassen z.B. wenn sie auf Bezüge aus nicht deklarierten (nicht vordefinierten) Variablen stammen.
Du bist möglicherweise bewandert in (theoretischer) Informatik, offensichtlich aber nicht in (praktischem) JavaScript.
Das dieses Konstrukt (unbekannte Objekte/Eigenschaften in Bedingungen) nicht zu einem Fehler, sondern schlicht unwahr ergibt, ist in JS exakt so definiert.
Fazit: Browserdivergente Code nicht mischen.
Fazit: Hinsetzen, 6, noch viel lernen ...
Gruß, Cybaer
Unter Firefox geht folgendes:
<script type="text/javascript">
function klick (e) {
if(e.button == 2)
alert("Es wurde geklickt");
}
</script>
<span onmousedown="klick(event)">Klick mich</span>
Wo das problem bei dir liegt, weiß ich nicht...
Hallo,
ich bräuchte in meiner Page eine Funktion, die mir beim Anklicken eines Textes mit der rechten Maustaste eine Alert-Box ausgibt.
Du kannst nicht so ohne weiteres feststellen, ob Text angeklickt wurde. Events passieren bei Elementknoten, nicht bei Textknoten oder CSS-internen Zeilenboxen. D.h. Events kannst du nur auf der Ebene von Elementen auswerten. Du kannst also prüfen, ob der Klick auf ein Element ging, das Text enthält - das gilt aber direkt oder indirekt für fast alle Elemente im DOM, es wäre also schwer, ein Kriterium dafür zu finden. Auch kannst du nicht prüfen, ob der Klick wirklich auf den Text in der Content-Box oder auf border oder padding traf.
Deshalb nach dem üblichen »das geht so nicht« die übliche Frage: Was hast du eigentlich vor?
Mathias
Hallo,
ich bräuchte in meiner Page eine Funktion, die mir beim Anklicken eines Textes mit der rechten Maustaste eine Alert-Box ausgibt.
Du kannst nicht so ohne weiteres feststellen, ob Text angeklickt wurde.
Naja, das Beispiel stand ja in einem Element, ich denke mal er hat sich da nur mißverständlich ausgedrückt.
Struppi.
Hi,
ich hab ein kleines CMS-System mit PHP programmiert, bei dem man
Texte nach einem Rechtklick darauf ändern kann.
D.h. nachdem der Text mit der rechten Maustaste angeklickt wurde, geht dieser in einem separaten Texteditor auf u´nd kann editiert werden.
Dazu muss aber ja irgendwie ermittelt werden, welcher Text angeklickt wurde.
Gruß
Daniel
Hallo,
ich bräuchte in meiner Page eine Funktion, die mir beim Anklicken eines Textes mit der rechten Maustaste eine Alert-Box ausgibt.
Du kannst nicht so ohne weiteres feststellen, ob Text angeklickt wurde. Events passieren bei Elementknoten, nicht bei Textknoten oder CSS-internen Zeilenboxen. D.h. Events kannst du nur auf der Ebene von Elementen auswerten. Du kannst also prüfen, ob der Klick auf ein Element ging, das Text enthält - das gilt aber direkt oder indirekt für fast alle Elemente im DOM, es wäre also schwer, ein Kriterium dafür zu finden. Auch kannst du nicht prüfen, ob der Klick wirklich auf den Text in der Content-Box oder auf border oder padding traf.
Deshalb nach dem üblichen »das geht so nicht« die übliche Frage: Was hast du eigentlich vor?
Mathias
Dazu muss aber ja irgendwie ermittelt werden, welcher Text angeklickt wurde.
function onmouse(e)
{
if(!e) e = window.event;
var btn = e.button ;// || e.which;
if(btn == 2) {
var el = e.target || e.srcElement;
alert(el.firstChild.data)
}
return false;
}
window.onload = function()
{
var all = document.getElementsByTagName('*');
for(var i = 0; i < all.length; i++) all[i].onmouseup = onmouse;
}
wobei der Event so mehrfach ausgeführt wird und laut den Ausführungen auf selfhtml die Abfrage auch nciht zuverlässig fuinktioniert.
Struppi.
Hallo,
var btn = e.button ;// || e.which;
if(btn == 2) {
Zur bloßen Erkennung von Rechtsklick ist eigentlich diese Funktion am geeignetsten, oder?
http://www.quirksmode.org/js/events_properties.html#button
Mathias