ASP-Seite mit VBScript und JavaScript
gizzy
- javascript
Ich bin hier gerade ein wenig am verzweifeln. ich habe eine ASP-Seite in der serverseitige Datenbankabfragen in VBScript abgearbeiet werden.
Nun möchte ich zudem clientseitig dynamisch einige Eingaben vom User auf Plausiblität prüfen. Da kommt dann JavaScript ins Spiel. Im folgenden ein Auszug aus dem Quelltext:
<%@ Language="VBScript"
.
.
.
...datenbankabfrage...
.
.
%>
<table>
.
.
.
<%
Response.write ("<select name=ende style='width:100%' onchange='javascript:checkvalue(this.options[this.selectedIndex].value,this.form.Ausgabe1.value);'>")
%>
</table>
<%
.
.
...noch ein paar ausgaben
.
.
%>
<Script Language="JavaScript">
function checkvalue(egal,egal2)
{
alert(egal);
alert(egal2);
}
</script>
soweit so gut...die Funktion wird auch aufgerufen und es werden nacheinander zwei Alert-Fenster angezeigt.
Ich möchte allerdings die beiden Werte vergleichen. Also in etwa so:
if (egal2<egal) { Alert("Wert2 muss grösser sein!"); }
Aber das "<" wird wohl als HTML-Code interpretiert und nicht als "Kleiner"-Zeichen?!
Wo liegt mein Fehler in der Syntax?
<select name=ende style='width:100%' onchange='javascript:checkvalue(this.options[this.selectedIndex].value,this.form.Ausgabe1.value);'>
Das »javascript:« hier ist überflüssig und erfüllt keinen Zweck.
if (egal2<egal) { Alert("Wert2 muss grösser sein!"); }
Aber das "<" wird wohl als HTML-Code interpretiert und nicht als "Kleiner"-Zeichen?!
Welche Beobachtung bringt dich zu dieser Annahme? Und warum enthältst du sie uns vor? ;)
Wo liegt mein Fehler in der Syntax?
In der Syntax liegt wahrscheinlich kein Fehler und ich vermute, dein serverseitiger Code ist für das Problem irrelevant, sondern nur das, was beim Client ankommt.
Du musst bedenken, dass sowohl egal als auch egal2 beides Strings sind. Bei String hat der <-Operator eine andere Bedeutung. Wenn du sie als Zahlen vergleichen willst, musst du sie vorher ausdrücklich in Number-Werte umwandeln, z.B. jeweils mit http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt() oder http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#number@title=Number().
Mathias
Hallo Mathias,
Welche Beobachtung bringt dich zu dieser Annahme? Und warum enthältst du sie uns vor? ;)
Also wenn meine Funtkion z.B. so aus sieht:
<Script Language="JavaScript">
function checkvalue(egal,egal2)
{
if (number(egal) < number(egal2)) {
alert("Wert2 muss grösser sein!");
}
}
</script>
Also zum einen wird in meinem Editor der Text nach dem "<"-Zeichen in blauer Farbe dargestellt (wie sonst auch bei HTML-Code)
und zum anderen bekomme ich beim Explorer beim Ausführen der Funktion einen Fehler angezeigt "Objekt erwartet"
Dann sind meine ersten Schritte mit JavaScript. Deswegen schliesse ich einen ganz blöden Fehler ausdrücklich nicht aus;)
<Script Language="JavaScript">
</script>
Script != script
das offnende und schließende tag sollte in deinem eigenen interesse übereinstimmen
zudem möchtest du vermutlich das language-attribut entfernen und durch ein type-attribut mit dem inhalt "text/javascript" ersetzen
Also zum einen wird in meinem Editor der Text nach dem "<"-Zeichen in blauer Farbe dargestellt (wie sonst auch bei HTML-Code)
dann ist das syntaxschema deines editors fehlerhaft - ein die öffnende "klammer" eines sgml oder html-tags kann unmöglich danach ein leerzeichen enthalten
ggf möchtest du dein javascript auch nur vor dem deinem html-client verstecken (entweder in dem du es zb auslagerst)
if (number(egal) < number(egal2)) {
Die Funktion heißt »Number« und Groß- und Kleinschreibung macht in JavaScript einen Unterschied: Number anstatt number.
Mathias
das habe ich geändert. Hat aber auch kein Erfolg gebracht.
Das Hauptproblem scheint wirklich zu sein das das JavaScript nach dem "<" nicht als solches erkannt wird. Kann es an irgendwelchen Versionen hängen (z.b Explorer oder Java oder was auch immer?)
Was für ein Objekt könnte er denn erwarten?
<Script Language="Javascript">
function checkvalue(egal,egal2)
{
if (Number(egal) < Number(egal2)) {
alert("Wert2 muss grösser sein!");
}
}
</Script>
if (number(egal) < number(egal2)) {
Die Funktion heißt »Number« und Groß- und Kleinschreibung macht in JavaScript einen Unterschied: Number anstatt number.
Mathias
Hi,
Das Hauptproblem scheint wirklich zu sein das das JavaScript nach dem "<" nicht als solches erkannt wird.
von wem? Wie lautet der Code, der beim Client ankommt?
Kann es an irgendwelchen Versionen hängen (z.b Explorer oder Java oder was auch immer?)
Der Explorer spielt keine Rolle, sondern höchstens der Internet Explorer. Java haben wir hier *kein* Stück, sondern lediglich JavaScript.
Was für ein Objekt könnte er denn erwarten?
Die Fehlermeldungen des Internet Explorers sind primitiv, nichtssagend bis irreführend, und in vielen Fällen auch falsch (besonders bezüglich der Zeilennummer). Richte Dich in erster Linie nach dem, was richtige Browser sagen.
<Script Language="Javascript">
Schreibe Deinen HTML-Code (soweit kompatibel) XHTML-konform, also <script> statt <Script>. Das language-Attribut ist nutzfrei und ggf. ungültig, eliminere es. Statt dessen füge das *immer* *zwingend* benötigte type-Attribut ein.
function checkvalue(egal,egal2)
Warum setzt Du eigentlich keinen <![CDATA[ ... ]]>-Bereich?
if (number(egal) < number(egal2)) {
Die Funktion heißt »Number« und Groß- und Kleinschreibung macht in JavaScript einen Unterschied: Number anstatt number.
Mathias
Zitiere bitte nur das, worauf Du Dich beziehst, und antworte in einer in Mitteleuropa üblichen Leserichtung, danke.
Cheatah
So mittlerweile läuft es. Nicht das ich wüsste wodran es gelegen hat, aber was solls. Ich hatte nochmal das Onchange-event geändert.
Von:
Response.write ("<select name=ende style='width:100%' onchange='javascript:checkvalue(this.options[this.selectedIndex].value,this.form.Ausgabe1.value);'>")
nach:
Response.write ("<select name=ende style='width:100%' onchange='javascript:checkvalue(this.options[this.selectedIndex].value,Ausgabe1.value);'>")
danach lief es auf einmal. Jetzt ist es wieder wie vorher und es läuft immer noch?!
Der Explorer spielt keine Rolle, sondern höchstens der Internet Explorer. Java haben wir hier *kein* Stück, sondern lediglich JavaScript.
ich weiss, da war ich ein wenig schnell bzw. ungenau:)
»»Schreibe Deinen HTML-Code (soweit kompatibel) XHTML-konform, also <script> statt <Script>. Das language-Attribut ist nutzfrei und ggf. ungültig, eliminere es. Statt dessen füge das *immer* *zwingend* benötigte type-Attribut ein.
danke, werde ich beherzigen.
Warum setzt Du eigentlich keinen <![CDATA[ ... ]]>-Bereich?
ehrlicherweise, habe ich es gerade zum ersten Mal gelesen:). Ich werde mal schauen ob ich was finde wie es anwende.
gizzy
Mahlzeit gizzy,
So mittlerweile läuft es. Nicht das ich wüsste wodran es gelegen hat,
Ich vermutte, ich habe da so eine Ahnung ...
aber was solls.
Genau ... egal, was ich eigentlich mache, ich tippe und kopiere mal ein bisschen und irgendwie wird's schon hinhauen. Und wenn nicht, muss ich mich ja gar nicht genau informieren, Dokumentation oder Handbücher lesen, ich frage einfach die Junx und Mädelz im SELFHTML-Forum - die haben eh zu viel Zeit.
Von:
Response.write ("<select name=ende style='width:100%' onchange='javascript:checkvalue(this.options[this.selectedIndex].value,this.form.Ausgabe1.value);'>")
Wie molily bereits schrieb, existiert das Protokoll "javascript:" nicht und seine Nennung ist deswegen mindestens überflüssig, wenn nicht gar fehlerhaft. Lass es also weg.
nach:
Response.write ("<select name=ende style='width:100%' onchange='javascript:checkvalue(this.options[this.selectedIndex].value,Ausgabe1.value);'>")
Und Du weißt nicht, wo da der Unterschied ist? Vielleicht existiert in dem Formular, in dem sich die Auswahlliste befindet, gar kein Formularelement mit dem Namen "Ausgabe1"? Außerdem sollte man sich IMHO nicht darauf verlassen, dass der Browser ein Objekt namens "Ausgabe1" zur Verfügung stellt, das direkt angesprochen werden kann.
danach lief es auf einmal. Jetzt ist es wieder wie vorher und es läuft immer noch?!
Wie jetzt ... wie ist es jetzt genau?
MfG,
EKKi
Genau ... egal, was ich eigentlich mache, ich tippe und kopiere mal ein bisschen und irgendwie wird's schon hinhauen. Und wenn nicht, muss ich mich ja gar nicht genau informieren, Dokumentation oder Handbücher lesen, ich frage einfach die Junx und Mädelz im SELFHTML-Forum - die haben eh zu viel Zeit.
ok, ich kann verstehen das der Eindruck entstanden ist. Ganz so ist es aber trotzdem nicht. Ich habe bevor ich hier ins Forum geschrieben habe schon gegoogelt, aber nicht das richtige gefunden.
Und ja natürlich probiert man ein wenig aus wenn man nicht weiter kommt....machst du das nicht;)?
Wie molily bereits schrieb, existiert das Protokoll "javascript:" nicht und seine Nennung ist deswegen mindestens überflüssig, wenn nicht gar fehlerhaft. Lass es also weg.
das "javascript:" hatte ich schon nach molily post entfernt;). Ich hatte nur in meinem letzten Post den falschen Text kopiert(den aus meinem Anfangspost).
Und Du weißt nicht, wo da der Unterschied ist? Vielleicht existiert in dem Formular, in dem sich die Auswahlliste befindet, gar kein Formularelement mit dem Namen "Ausgabe1"?
doch das Formularelement Ausgabe1 existiert. Sonst würde ja auf jeden Fall keine von beiden Varianten funktionieren. Die Variante mit this.form kann nur funktionieren wenn auch ein <form> angelegt ist. Das ist der Fall.
Außerdem sollte man sich IMHO nicht darauf verlassen, dass der Browser ein Objekt namens "Ausgabe1" zur Verfügung stellt, das direkt angesprochen werden kann.
könntest du das genauer erläutern?
Wie jetzt ... wie ist es jetzt genau?
es ist jetzt so:
Response.write ("<select name=ende style='width:100%' onchange='checkvalue(this.options[this.selectedIndex].value,Ausgabe1.value);'>")
es funktioniert jetzt aber auch mit:
Response.write ("<select name=ende style='width:100%' onchange='checkvalue(this.options[this.selectedIndex].value,this.form.Ausgabe1.value);'>")
auch mit dem "javascript:" davor klappt es jetzt. Ich habe es aber trotzdem wieder entfernt.
Letzlich weiss ich also nicht wirklich warum es jetzt funktioniert. bzw, warum es vorher nicht funktioniert hat. Leider!
Gruß gizzy
Mahlzeit gizzy,
Und Du weißt nicht, wo da der Unterschied ist? Vielleicht existiert in dem Formular, in dem sich die Auswahlliste befindet, gar kein Formularelement mit dem Namen "Ausgabe1"?
doch das Formularelement Ausgabe1 existiert.
Und - hat es die ID "Ausgabe1" oder den NAMEN "Ausgabe1"? Das ist ein Unterschied.
Sonst würde ja auf jeden Fall keine von beiden Varianten funktionieren.
Das ist so nicht ganz korrekt.
Außerdem sollte man sich IMHO nicht darauf verlassen, dass der Browser ein Objekt namens "Ausgabe1" zur Verfügung stellt, das direkt angesprochen werden kann.
könntest du das genauer erläutern?
Die IMHO einzig richtigen Methoden, auf Formularelemente zuzugreifen, sind die, die unter "<http://de.selfhtml.org/javascript/objekte/elements.htm@title=Allgemeines zur Verwendung>" beschrieben werden.
Normalerweise sollte ein Browser, wenn ein HTML-Element eine ID besitzt, in Javascript ein Objekt erstellen, das genauso heißt wie seine ID. Beispiel:
<input type="text" id="Ausgabe1" value="foobar">
alert(Ausgabe1.value);
Formularelemente werden allerdings über ihren NAMEN angesprochen - nicht über ihre ID.
Streng genommen dürfte also, wenn Du in Deinem HTML-Code einem Formularelement nur einen Namen, nicht jedoch eine ID zuweist, dort also
<input type="text" name="Ausgabe1" value="foobar">
stehen hast, der Zugriff per Javascript über
alert(Ausgabe1.value);
nicht funktionieren.
Dummerweise ist das allerdings nicht wirklich konsequent von allen Browser gleich umgesetzt. Genau deswegen kann ich Dir nur empfehlen, Deine Formularelement in HTML sauber und W3C-konform zu definieren und sie in Javascript sauber und W3C-konform anzusprechen (mittels "document.form['form1'].elements['Ausgabe1']
" bzw. "this.form.elements['Ausgabe1']
") ... wenn ein Browser damit dann Schwierigkeiten haben sollte, liegt's definitiv am Browser.
es funktioniert jetzt aber auch mit:
Response.write ("<select name=ende style='width:100%' onchange='checkvalue(this.options[this.selectedIndex].value,this.form.Ausgabe1.value);'>")
Dies ist aus den o.g. Gründen die Zugriffsweise, die der anderen vorzuziehen ist.
auch mit dem "javascript:" davor klappt es jetzt. Ich habe es aber trotzdem wieder entfernt.
Das ist auch das einzig Richtige. Es hat dort nichts zu suchen.
Letzlich weiss ich also nicht wirklich warum es jetzt funktioniert. bzw, warum es vorher nicht funktioniert hat. Leider!
Leider ist das Problem nicht wirklich nachvollziehbar ...
MfG,
EKKi
Hallo EKKi,
Und - hat es die ID "Ausgabe1" oder den NAMEN "Ausgabe1"? Das ist ein Unterschied.
es hat den NAMEN Ausgabe1.
könntest du das genauer erläutern?
Die IMHO einzig richtigen Methoden, auf Formularelemente zuzugreifen, sind die, die unter "<http://de.selfhtml.org/javascript/objekte/elements.htm@title=Allgemeines zur Verwendung>" beschrieben werden.
.....
Danke dir für die ausführliche Antwort! Ich werde mir deinen Link, wenn ich die nötige Ruhe habe genau zu Gemüte führen. Auch deine anderen Ausführungen werden mir auf jeden Fall sehr helfen:)!
Letzlich weiss ich also nicht wirklich warum es jetzt funktioniert. bzw, warum es vorher nicht funktioniert hat. Leider!
Leider ist das Problem nicht wirklich nachvollziehbar ...
ich habe noch die kleine Hoffnung, das mir da im nachhinein noch ein Licht aufgeht wodran es lag, wenn ich deinen Link durchgearbeitet habe.
Also vielen Dank an Dich und die anderen die geholfen haben!
Gruß
gizzy
Hi,
Wie molily bereits schrieb, existiert das Protokoll "javascript:" nicht
nein, aber das Pseudo-Protokoll "javascript:". Leider spielt das hier keine Rolle, weil Event-Handler keine URL erwarten ;-)
und seine Nennung ist deswegen mindestens überflüssig, wenn nicht gar fehlerhaft.
Richtig, denn es wird hier als JavaScript-Code interpretiert.
Cheatah
Mahlzeit Cheatah,
Wie molily bereits schrieb, existiert das Protokoll "javascript:" nicht
nein, aber das Pseudo-Protokoll "javascript:". Leider spielt das hier keine Rolle, weil Event-Handler keine URL erwarten ;-)
Hmpf ... Erbsenzähler! ;-P
MfG,
EKKi
Hi,
Hmpf ... Erbsenzähler! ;-P
und hier mein Ergebnis: 42, wie immer ohne Gewähr. Vielen Dank für die Beauftragung unseres Erbsenzählerdienstes, und beehren Sie uns bald wieder! ;-)
Cheatah