Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

toUpperCase() währende der Eingabe

22 views
Skip to first unread message

Wolfgang Wolf

unread,
Dec 20, 2012, 6:20:50 AM12/20/12
to
Hallo,

folgender Code funktioniert leider nur im IE:
function changeCase(e) {
var key;
if (window.event) {
key = window.event.keyCode;
if ((key >= 97) && (key <= 122)) window.event.keyCode = key-32;
} else if (e.which) {
key = e.which ;
if ((key >= 97) && (key <= 122)) e.which = key-32;
}
}


Ich suche nach einer Möglichkeit, die Eingabe des Anwenders während der
Eingabe in Großbuchstaben umzuwandeln. Die Value des Textfeldes zu
ändern taugt nicht, weil sich damit die Cursor-Position im Textfeld
verändert. CSS kann ich auch nicht verwenden, weil das auch bei
bestimmten Sonderzeichen wie dem "µ" greift. Habt ihr dazu noch bessere
Vorschläge? Danke für jegliche Mühe.

Schönen Gruß
W. Wolf

Thomas 'PointedEars' Lahn

unread,
Dec 20, 2012, 9:35:16 AM12/20/12
to
Wolfgang Wolf wrote:

> folgender Code funktioniert leider nur im IE:

Das täuscht. In Wirklichkeit funktioniert er gar nicht.

<http://unixpapa.com/js/key.html>
<http://brain4.de/programmierecke/js/tastatur.php#start>

> function changeCase(e) {
> var key;
> if (window.event) {
> key = window.event.keyCode;
> if ((key >= 97) && (key <= 122)) window.event.keyCode = key-32;
> } else if (e.which) {
> key = e.which ;
> if ((key >= 97) && (key <= 122)) e.which = key-32;
> }
> }
>
> Ich suche nach einer Möglichkeit, die Eingabe des Anwenders während der
> Eingabe in Großbuchstaben umzuwandeln. Die Value des Textfeldes zu
> ändern taugt nicht, weil sich damit die Cursor-Position im Textfeld
> verändert.

Du kannst die Eigenschaften “selectionStart” und “selectionEnd” auf
denselben Wert setzen, um die ursprüngliche Cursorposition
wiederherzustellen. Das sollte im Gecko-DOM und in WebCore funktionieren
(getestet in Chromium 22). Alternativ gibt es noch setSelectionRange().

<https://developer.mozilla.org/en-US/docs/DOM/HTMLInputElement>

> CSS kann ich auch nicht verwenden, weil das auch bei
> bestimmten Sonderzeichen wie dem "µ" greift.

In dem Fall würde ich die Eingabe solcher Zeichen von vornherein
clientseitig ausschliessen (zum Beispiel mithilfe von
jsx.dom.widgets.Input.prototype.allowedChars [1]). Das erspart die
Veränderung der value-Eigenschaft.

Serverseitig validieren musst Du zusätzlich immer.


PointedEars
___________
[1]
<http://PointedEars.de/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Fdom%2Fwidgets.js&rev=301>
--
This is a development release of Freenet. This means that it isn't
supposed to work, so if it does, it is not doing what it is supposed
to do, and is therefore not working.
(from the Freenet 0.4.4 documentation <http://freenetproject.org/>)

Wolfgang Wolf

unread,
Dec 21, 2012, 8:10:12 AM12/21/12
to
Am 20.12.2012 15:35, schrieb Thomas 'PointedEars' Lahn:

>> folgender Code funktioniert leider nur im IE:
>
> Das täuscht. In Wirklichkeit funktioniert er gar nicht.
>
Natürlich funktioniert er in allen von mir getesteten IE-Versionen. Beim
IE wird das window.event gefeuert und mit window.event.keyCode kann ich
das eingegebene Zeichen ändern. Auch der else if Zweig wird von den
Browsern ohne window.event durchlaufen, allerdings kann ich hier den
keyCode nicht ändern.

>
> Du kannst die Eigenschaften “selectionStart” und “selectionEnd” auf
> denselben Wert setzen, um die ursprüngliche Cursorposition
> wiederherzustellen.

Ok, dieses Gefummel werde ich mal testen. Bin allerdings skeptisch, weil
meine Eingabe alternativ auch per Barcode-Scanner erfolgen kann und das
wird wahrscheinlich schief gehen. Danke für den Tipp.

>> bestimmten Sonderzeichen wie dem "µ" greift.
>
> In dem Fall würde ich die Eingabe solcher Zeichen von vornherein ausschliessen

Diese Lösung ist lustig! Klingt genauso wie "Garten betonieren um das
Unkraut zu verhindern". Nein, die µ müssen schon möglich sein, sonst
killen mich meine Kunden aus der Elektronik-Branche.

Schönen Gruß
W. Wolf

Thomas 'PointedEars' Lahn

unread,
Dec 21, 2012, 10:23:44 AM12/21/12
to
Wolfgang Wolf wrote:

> Am 20.12.2012 15:35, schrieb Thomas 'PointedEars' Lahn:
>>> folgender Code funktioniert leider nur im IE:
>> Das täuscht. In Wirklichkeit funktioniert er gar nicht.
>
> Natürlich funktioniert er

Du hast die referenzierten Dokumente nicht gelesen, oder?

> in allen von mir getesteten IE-Versionen.

Die da wären?

> Beim IE wird das window.event gefeuert

Du redest wie der Blinde von der Farbe.

> und mit window.event.keyCode kann ich das eingegebene Zeichen ändern.

Nur dass der Tastaturcode recht wenig mit dem eingegebenen Zeichen selbst zu
tun hat und von einer Tastatur zur anderen variieren kann. Deshalb gibt es
die charCode-Eigenschaft; allerdings leider bislang nicht im MSHTML DOM.

Fazit: Dein vermutlich von einer veralteten Müllwebsite (“which”) geklauter
Müllcode (“if (window.event)”) funktioniert in Wirklichkeit nicht.

> Auch der else if Zweig wird von den Browsern ohne window.event
> durchlaufen,

Vielleicht magst Du mal erklären, was “window.event” mit der keyCode-
Eigenschaft zu tun haben soll. Du musst die Eigenschaften testen, die
Du benutzt, nicht völlig andere, Wenn es überhaupt eine Chance haben
soll, zu funktionieren. Ausserdem ist es nötig, die richtigen Events
zu benutzen (keypress für druckbare Zeichen, keydown/keyup für
Steuertasten), was aus Deinem Code ebenfalls nicht hervorgeht.

> allerdings kann ich hier den keyCode nicht ändern.

Siehe oben.

>> Du kannst die Eigenschaften “selectionStart” und “selectionEnd” auf
>> denselben Wert setzen, um die ursprüngliche Cursorposition
>> wiederherzustellen.
>
> Ok, dieses Gefummel werde ich mal testen. Bin allerdings skeptisch, weil
> meine Eingabe alternativ auch per Barcode-Scanner erfolgen kann und das
> wird wahrscheinlich schief gehen. Danke für den Tipp.

Das wird wahrscheinlich funktionieren, denn wie ich bereits schrieb hatte
ich es getestet. Man muss nur verhindern, dass, wenn kein Zeichen
eingegeben wird (also etwa der Cursor mit Pfeiltasten bewegt wird), diese
Funktion etwas tut.

Barcode-Scanner tun so etwas AFAIK allerdings nicht, deren Eingabe ist
äquivalent zu einer fortlaufenden Tastaturbenutzung ohne Sondertasten. Erst
wenn man deren Eingabe nachträglich korrigieren muss, werden Sondertasten
relevant.

>>> bestimmten Sonderzeichen wie dem "µ" greift.
>>
>> In dem Fall würde ich die Eingabe solcher Zeichen von vornherein
>> ausschliessen
>
> Diese Lösung ist lustig!

Nein, normalerweise ist das eher praktisch, sonst hätte ich die Möglichkeit
nicht in JSX eingebaut.

Dort stand übrigens “von vornherein *clientseitig* ausschliessen”. Wenn
Du mich noch einmal sinnentstellend zitierst, war die so fchsal zitierte
Antwort meine letzte auf ein Posting von Dir. You have been warned.

> Klingt genauso wie "Garten betonieren um das Unkraut zu verhindern". Nein,
> die µ müssen schon möglich sein, sonst killen mich meine Kunden aus der
> Elektronik-Branche.

1. Deinen Use-Case kann ich nicht riechen.

2. Deine Kunden stört es, wenn dort lateinische Kleinbuchstaben stehen, die
sie aber eingegeben haben – griechische Kleinbuchstaben stören sie aber
nicht?


Score adjusted

PointedEars
--
Linux is like a *wigwam*: no gates, no windows and an apache inside.

Arno Welzel

unread,
Dec 24, 2012, 3:02:13 AM12/24/12
to
Wolfgang Wolf, 20.12.2012 12:20:

> Hallo,
>
> folgender Code funktioniert leider nur im IE:
> function changeCase(e) {
> var key;
> if (window.event) {
> key = window.event.keyCode;
> if ((key >= 97) && (key <= 122)) window.event.keyCode = key-32;
> } else if (e.which) {
> key = e.which ;
> if ((key >= 97) && (key <= 122)) e.which = key-32;
> }
> }
>
>
> Ich suche nach einer Mᅵglichkeit, die Eingabe des Anwenders wᅵhrend der
> Eingabe in Groᅵbuchstaben umzuwandeln. Die Value des Textfeldes zu
> ᅵndern taugt nicht, weil sich damit die Cursor-Position im Textfeld
> verᅵndert. CSS kann ich auch nicht verwenden, weil das auch bei
> bestimmten Sonderzeichen wie dem "ᅵ" greift. Habt ihr dazu noch bessere
> Vorschlᅵge? Danke fᅵr jegliche Mᅵhe.

Gar nicht im Browser machen, sondern auf Serverseite behandeln. Die
Umwandlung wᅵrde ohne aktiviertes JavaScript ohnehin nicht funktionieren
und um eine Behandlung auf Serverseite kommst Du ohnehin nicht herum, da
entsprechende Requests auch gᅵnzlich ohne Formular direkt an den
Webserver geschickt werden kᅵnnen.


--
Arno Welzel
http://arnowelzel.de
http://de-rec-fahrrad.de

Holger Jeromin

unread,
Dec 25, 2012, 5:36:38 PM12/25/12
to
Arno Welzel schrieb am 24.12.2012 09:02:
> Gar nicht im Browser machen, sondern auf Serverseite behandeln. Die
> Umwandlung wᅵrde ohne aktiviertes JavaScript ohnehin nicht funktionieren
> und um eine Behandlung auf Serverseite kommst Du ohnehin nicht herum, da
> entsprechende Requests auch gᅵnzlich ohne Formular direkt an den
> Webserver geschickt werden kᅵnnen.

Hat aber den usability Vorteil, dass der User sofort merkt, dass die
groᅵ/kleinschreibung egal ist.

--
Grᅵᅵe
Holger Jeromin

Arno Welzel

unread,
Dec 26, 2012, 4:02:46 PM12/26/12
to
Holger Jeromin, 25.12.2012 23:36:
Mag sein - deswegen muss man die Umwandlung in Groᅵbuchstaben und den
Ausschluᅵ nicht erlaubter Zeichen trotzdem in jedem Fall auf Serverseite
behandeln, egal ob der Browser das kann oder nicht.

Wolfgang Wolf

unread,
Dec 28, 2012, 3:20:50 AM12/28/12
to
Am 26.12.2012 22:02, schrieb Arno Welzel:
[...]
>>
>> Hat aber den usability Vorteil, dass der User sofort merkt, dass die
>> groß/kleinschreibung egal ist.
>
> Mag sein - deswegen muss man die Umwandlung in Großbuchstaben und den
> Ausschluß nicht erlaubter Zeichen trotzdem in jedem Fall auf Serverseite
> behandeln, egal ob der Browser das kann oder nicht.
>
>
Stimmt schon, wird so auch gemacht. Das ist auch kein großer Akt, weil
der ganze String in einem Rutsch gewandelt wird.

Was Holger sagt ist aber auch richtig. Es geht rein um die visuelle
Rückmeldung an den Anwender. Dieser weiß, dass nur Großbuchstaben und
Sonderzeichen erlaubt sind, weil das per Anwendungs-Definition so ist.
Wenn der Browser die Umwandlung nicht selbst macht, dann meint der
Anwender instinktiv er müsste das machen und verrenkt seine Finger
unnötiger Weise. Wäre das mit den Sonderzeichen nicht, dann würde CSS
vollkommen reichen.

Schönen Gruß
W. Wolf

Wolfgang Wolf

unread,
Dec 28, 2012, 3:49:39 AM12/28/12
to
Am 21.12.2012 16:23, schrieb Thomas 'PointedEars' Lahn:
> Wolfgang Wolf wrote:
>
>
> Du hast die referenzierten Dokumente nicht gelesen, oder?
>
Überflogen ja, die Tests auf der zweiten Seite auch ausprobiert.
Bringt mich halt nicht wirklich weiter.

>> in allen von mir getesteten IE-Versionen.
>
> Die da wären?
>
IE9 (mit Browsermodus IE7-9) und IE10. Es gab ja schon mal in der
Geschichte einen Thomas der nicht glauben wollte. Dem konnte auch
geholfen werden. Hier ein Minicode der unter den benannten IEs das tut
was ich gerne hätte:

<!doctype html>
<html lang="de"><head>
<title>UCase Test</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>

<form id="frmSearch" action="search" method="post">
<p><input type="text" id="txSearch" name="txSearch"
onkeypress="changeCase()" />
<input type="submit" value="Suche" /></p>
</form>
<script type="text/javascript">
function changeCase() {
if (window.event) {
var key = window.event.keyCode;
if ((key >= 97) && (key <= 122)) window.event.keyCode = key-32;
}
}
</script>
</body>


[...]

> Fazit: Dein vermutlich von einer veralteten Müllwebsite (“which”) geklauter
> Müllcode (“if (window.event)”) funktioniert in Wirklichkeit nicht.

Soll mir auch recht sein. So lange er hier bei mir funktioniert, reicht
mir das vorerst. Darüber hinaus sollst Du recht behalten.


[...]
> Score adjusted
Kann ich das irgendwie beschleunigen? Ich würde uns beiden damit gerne
was Gutes tun.

Schönen Gruß
W. Wolf

Claus Reibenstein

unread,
Dec 28, 2012, 4:01:08 AM12/28/12
to
Wolfgang Wolf schrieb:

> Am 21.12.2012 16:23, schrieb Thomas 'PointedEars' Lahn:
>
>> Score adjusted
>
> Kann ich das irgendwie beschleunigen?

Du könntest z.B. Deine eigenen Filter entsprechend anpassen.

> Ich würde uns beiden damit gerne
> was Gutes tun.

Damit würdest Du vermutlich _allen_ was Gutes tun.

Gruß
Claus
0 new messages