Bei fokussiertem Formular-Textfeld JS-Funktion deaktivieren
mangodrone
- javascript
0 JürgenB
0 Kai3450 mangodrone
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
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
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
[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
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
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