Boro Geschrieben 12. Juli 2011 Geschrieben 12. Juli 2011 Hallo, ich komme bei einer eigentlich simplen Aufgaben einfach nicht auf das richtige Syntax bzw. das richtige Objekt. Mein Ziel ist es ein keypress-ereignis clientseitig via javascript abzufangen. Das soll später dazu verwendet werden um Fehleingaben zu vermeiden. Den größten Teil habe ich schon, es fehlt aber noch das eingegebene Zeichen. Hier mein bisheriger Code: <asp:TextBox ID="txtanzeige" runat="server" style="margin-left: 4px; text-align: right;" Width="196px" Height="28px" CausesValidation="True" onkeypress="return(MeineJavafunktion(HIER_MUSS_DAS_OBJECT/EVENT_ALS_PARAMETER_HIN))" ClientIDMode="Static" ></asp:TextBox> Die JavaScriptfunktion soll die Eingabe nachher anhand des Parameter validieren und true oder false zurückgeben. (Das bekomme ich aber selber hin) Kann mir jemand einen Tipp geben wie ich an das eingebene Zeichen komme? Mit "this" funktioniert es nicht und document.event.keycode ist an der Stelle scheinbar nicht verfügbar. Danke im Voraus Gruß Jens Zitieren
etreu Geschrieben 12. Juli 2011 Geschrieben 12. Juli 2011 Der Eventhandler (deine Javascript-Funktion) erhält als Parameter ein Event-Objekt. Hier unterscheiden sich die Browser in der Handhabung (SELFHTML: JavaScript / Objektreferenz / event). Zur einfacheren Handhabung kannst du dir auch ein nettes JS-Framework suchen, dass das Ganze für dich vereinheitlicht. Zitieren
lilith2k3 Geschrieben 12. Juli 2011 Geschrieben 12. Juli 2011 Zur einfacheren Handhabung kannst du dir auch ein nettes JS-Framework suchen, dass das Ganze für dich vereinheitlicht. AFAIk setzt MS ja auch auf jquery. Warum dann nicht damit arbeiten? Zitieren
Boro Geschrieben 13. Juli 2011 Autor Geschrieben 13. Juli 2011 Hallo, erstmal danke für die Antworten. @etreu Ja, das mit dem Eventhandler hab ich mir auch so vorgestellt, nur genau das bekomme ich leider nicht hin. Ich habe gestern noch ein wenig gebastelt und festgestellt das man das Event-Objekt scheinbar übergeben kann. Eine direkte Ausgabe des Parameters zeigt den Wert "[object KeyboardEvent]" an. Das scheint also grundsätzlich das gewünschte Objekt zu sein. Nur ist der Wert der Eigenschaft .keycode dann immer null. Also entweder benutze ich die falsche Methoden/Eigenschaften oder die Übergabe des Objekts funktioniert nicht. (Erzeugt vlt. eine neue Instanz und enthält deshalb keinen Wert?) Hier mal der Code, das Verhalten ist in den Kommentaren genauer beschrieben. Vlt. siehst du ja den Fehler. :-) Das ASP-Steuerelement in der Markup-Datei <asp:TextBox ID="txtanzeige" runat="server" style="margin-left: 4px; text-align: right;" Width="196px" Height="28px" CausesValidation="True" onkeypress="return(MeineJavafunktion(event))" ClientIDMode="Static" ></asp:TextBox> Die JavaScriptfunktion function MeineJavafunktion(DerParameter) { window.alert("Beginn JavaScript"); //Die nächste Zeile gibt interessanterweise [object KeyboardEvent] aus window.alert(DerParameter); //Aber die nächste Zeile gibt leider immer nur 0 aus. window.alert("Der Wert ist " + DerParameter.keyCode); window.alert("Ende JavaScript"); } @lilith2k3 Danke für den Tip. Ich steh noch ziemlich am Anfang mit ASP.Net mit Themen wie Jquery und Ajax habe ich mich noch nicht beschäftigt. Erstmal die Grundlagen verstehen. :-) Gruß Boro Zitieren
etreu Geschrieben 13. Juli 2011 Geschrieben 13. Juli 2011 Welchen Browser verwendest du denn? Und was liefert .wich? Zitieren
Boro Geschrieben 13. Juli 2011 Autor Geschrieben 13. Juli 2011 Super. :-) Mit .which bekomme ich die gewünschte Werte. Nochmals danke. Ich arbeite übrigens mit FF 5.0 und IE 9.0. Ich poste nachher mal die fertige Lösung. Gruß Boro Zitieren
etreu Geschrieben 13. Juli 2011 Geschrieben 13. Juli 2011 .keyCode vs. .wich must du in deiner Lösung beachten. Wenn einer deiner User mit nem IE daherkommt (nicht unwahrscheinlich, wenn du auf MS-Systemen entwickelst), kannst du mit .wich nicht viel anfangen. Zitieren
Boro Geschrieben 13. Juli 2011 Autor Geschrieben 13. Juli 2011 (bearbeitet) Hmm, das kann ich nicht bestätigen. Habe es gerade mit den beiden o.g. Browser getestet und erhalte auch mit dem IE 9 das richtige Ergebnis. Aber ich behalte es mal im Hinterkopf. Bearbeitet 13. Juli 2011 von Boro Zitieren
Boro Geschrieben 20. Juli 2011 Autor Geschrieben 20. Juli 2011 Wie versprochen, die vollständige (aber leider nicht perfekte) Lösung: Die Anforderung war das in ein Textfeld (für einen Taschenrechner) nur Zahlen eingeben werden dürfen. Alles anderen Eingaben sollen nicht zugelassen werden. Eine Hinweismeldung soll erstmal nicht erscheinen. Damit das klappt prüft die JavaScript-Funktion mit Hilfe eines regulären Ausdrucks ob es nur Zahlen (oder ein Backslash) ist. Falls nein gibt die Funktion ein false zurück und die Eingabe wird damit verworfen (es passiert einfach nichts wen man die Taste drückt). Nicht so gut an dieser Lösung ist das alle anderen Tasten auch geblockt werden, u.a. die Pfeiltasten. Aber das kann man vermutlich mit einer Erweiterung des regulären Ausdruck hin bekommen. Wie und ob sich das ganze mit Frameworks/Jquery abbilden läßt konnte ich noch nicht rausfinden. Aber die Chancen das es möglich ist stehen nicht schlecht. :-) Der Code für das ASP-Steuerelement in der Markup <asp:TextBox ID="txtanzeige" runat="server" style="margin-left: 4px; text-align: right;" Width="196px" Height="28px" CausesValidation="True" onkeypress="return(eingabepruefen(event))" ClientIDMode="Static" ontextchanged="txtanzeige_TextChanged1" ></asp:TextBox> Der Quellcode in der JS-Datei function eingabepruefen(pKeyevent) { //Tricky: Nach dem Oder-Zeichen des regulären Ausdrucks ist das Backspacezeichen via copy & paste eingefügt. //Innerhalb des Quellcode ist es nicht sichtbar, der Sucher berücksichtigt es aber trotzdem //Schlecht: Die Pfeiltasten um sich innerhalb des Text zu positionieren funktionieren so ebenfalls nicht -> eventuell doch ASCII-Code abfangen? var Sucher = /\d|/; window.alert("Das Label sollte sich jetzt ändern"); document.getElementById("ASPTextbox").value = "Hallo1"; document.getElementById("HTMLTextfeld").value = "Hallo2"; return Sucher.test(String.fromCharCode(pKeyevent.which)); } Gruss Boro Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.