mangodrone: Bei fokussiertem Formular-Textfeld JS-Funktion deaktivieren

Guten Abend

Zum Problem: Ich habe ein webbasiertes POS-System (Kassasystem) als riesiges Formular gebaut. Nach Post https://forum.selfhtml.org/?t=201676&m=1360881 habe ich mir Hotkeys eingerichtet um schneller mit dem System zu arbeiten. So löst nun bspw. ein Tastendruck auf "q" den Button "Quittieren" aus. Das funktioniert soweit perfekt.

Nur habe ich auch Textfelder, die ich benutzen muss. In denen kann ich nun aber kein "q" mehr schreiben, da sonst das Quittieren ausgelöst wird... Und hier wäre ich um Hilfe dankbar: Ich stelle mir eine Funktion vor, welche prüft ob ein Textfeld fokussiert ist und im Falle einer Fokussierung die Hotkeys-Funktion deaktiviert. Dazu habe ich ansatzweise im Internet bereits etwas gefunden: die Funktion hasFocus() "zeigt" an, ob ein Textfeld fokussiert ist. Da JavaScript nicht meine Stärke ist, habe ich keinen Ansatz, wie ich die Funktion für meine Zwecke umgestalten könnte. Für jegliche Hilfe bin ich dankbar.

Zum Script:

<head>
<script type="text/javascript">
function shortcut(key_event) {
if (!key_event)
{
key_event = window.event;
}

	// Für Firefox; 81 = Taste "q"  
	if (key\_event.which == 81)  
	{  
		document.getElementById('quit').click();  
	}  
	// Für IE  
	else if (key\_event.keyCode == 81)  
	{  
		document.getElementById('quit').click();  
	}  
}  
  
function hasFocus() {  
	// initialize function global reference to document element that currently h(as) f(ocus)  
	var hf;  
	// Firefox uses focusNode  
	if (document.focusNode)  
	{  
		hf = document.focusNode;  
	}  
	// IE uses activeElement  
	else  
	{  
		hf = document.activeElement;  
	}  
}  
  
document.onkeydown = shortcut;  

</script>
</head>

<body>
<form action="" name="form" method="POST">
<textarea name="text" id="text" onFocus="hasFocus()" ></textarea>
<input type="submit" name="quit" value="quit" id="quit">
</form>
</body>

Das POS-System wird übrigens nur im Firefox ausgeführt.
Vielen Dank
mangodrone

  1. Hallo mangodrone,

    nur eine Idee: ich würde im Eventhandler für onfocus den Eventhandler für onkeyup entfernen (...onkeydown=null;) und beim Verlassen (z.B.onblur) den onkeydown wieder einrichten.

    Gruß, Jürgen

    1. Hallo Jürgen

      nur eine Idee: ich würde im Eventhandler für onfocus den Eventhandler für onkeyup entfernen (...onkeydown=null;) und beim Verlassen (z.B.onblur) den onkeydown wieder einrichten.

      Vielen Dank für Deine Idee. Ich kann mir in etwa vorstellen wie du das gemeint hast. Da ich jedoch praktisch kein JavaScript kann (das meiste kopiere ich mir aus dem Internet zusammen), darf ich Dich bitten Deine Idee mit mit dem Script zu zeigen oder anzudeuten?

      Besten Dank
      mangodrone

  2. [latex]Mae  govannen![/latex]

    Guten Abend

    Gut' Nacht

    mit Ros^W^W

    Zum Problem: [cut]

    Zu deiner Info: Das hier beschriebene Problem hängt direkt mit dem in deinem anderen Thread zusammen, insofern ist dies ein Doppelposting, das hier nicht gerne gesehen wird.

    Beim nächsten Mal bitte Folgeprobleme im ursprünglichen Thread abhandeln, Kategorie und/oder Überschrift kannst du bei Bedarf in der vorschau passend ändern.

    Cü,

    Kai

    --
    ~~~ ken SENT ME ~~~
    Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
    in Richtung "Mess up the Web".(suit)
    SelfHTML-Forum-Stylesheet
    1. Guten Abend

      Zu deiner Info: Das hier beschriebene Problem hängt direkt mit dem in deinem anderen Thread zusammen, insofern ist dies ein Doppelposting, das hier nicht gerne gesehen wird.

      Beim nächsten Mal bitte Folgeprobleme im ursprünglichen Thread abhandeln, Kategorie und/oder Überschrift kannst du bei Bedarf in der vorschau passend ändern.

      Ich habe mir vor dem Verfassen überlegt, ob ich das Problem im alten Thread weiter führen sollte und habe dabei nochmals die Charta durchgelesen. Es war ein schmaler Entscheidungsgrat. Jedoch habe ich mich dagegen entschieden, da es für mich ein ausreichend autonomes Problem darstellt, deren Lösung auch ohne meinen ersten Post gelingen kann. Den Link zum ersten Thread fügte ich ein um eine Referenz für das Archiv zu bilden.

      Falls dieses Posting stört oder unangemessen ist, können die Moderatoren natürlich gerne die beiden Threads zusammenfügen. - In diesem Fall: Entschuldigung!

      mangodrone

  3. Hallo

    Konnte das Problem folgendermassen lösen:

    <script type="text/javascript">
    // Focus-Variable
    var focus = false;

    function shortcut(key\_event) {  
    	if (focus == false)  
    	{  
    		if (!key\_event)  
    		{  
    			key\_event = window.event;  
    		}  
    		  
    		// Für Firefox; 81 = Taste "q"  
    		if (key\_event.which == 81)  
    		{  
    			document.getElementById('quit').click();  
    		}  
    		// Für IE  
    		else if (key\_event.keyCode == 81)  
    		{  
    			document.getElementById('quit').click();  
    		}  
    	}  
    }  
    
    document.onkeydown = shortcut;  
    

    </script>
    </head>

    <body>
    <form action="" name="form" method="POST">
    <textarea name="text" id="text" onFocus="focus = true;" onBlur="focus = false;"></textarea>
    <input type="submit" name="quit" value="quit" id="quit">
    </form>
    </body>

    Gruss
    mangodrone