Abfragen, ob eval() einen Fehler erzeugt
Maja
- javascript
0 Dieter Raber0 Struppi0 Maja
0 Alexander Foken
Hallo,
ich habe ein Textfeld, in welches man Formeln in der Form 16*(2+5.6) eingeben kann. Bei onBlur wird der Wert mittels "eval()" berechnet. Das ganze sieht im Prinzip wie folgt aus.
<input name="fld1" type="text" id="fld1" onBlur="this.value = eval(this.value)">
Nun möchte ich aber auch überprüfen, ob der eingegebene Wert auch ein berechenbarer Ausdruck ist. Dafür habe ich aber überhaupt noch keine Idee und wäre dankbar, wenn mir jemand mit einem Lösungsansatz auf die Sprünge helfen könnte.
Außerdem habe ich hier im Forum des öfteren gelesen "eval() ist böse" und läßt sich zu 99.9% vermeiden. Bezieht sich das auch auf meine Art der Verwendung von "eval()"? Und wenn ja, welche Alternativen habe ich?
Vieln Dank im Voraus
Maja
Hallo,
Mach Dir ein kleines Funktiönchen, dass Deine Berechnungen übernimmt unter den entsprechenden Bedingungen, vielleicht schaust Du Dir mal http://selfhtml.teamone.de/javascript/beispiele/taschenrechner.htm an. Ob eval wirkilch evil ist, weiss ich leider nicht.
Dieter
Hallo,
Mach Dir ein kleines Funktiönchen, dass Deine Berechnungen übernimmt unter den entsprechenden Bedingungen, vielleicht schaust Du Dir mal http://selfhtml.teamone.de/javascript/beispiele/taschenrechner.htm an. Ob eval wirkilch evil ist, weiss ich leider nicht.
das ist ein schönes Beispiel von unnötigen eval.
x = eval(window.document.Rechner.Display.value);
window.document.Rechner.Display.value = x;
Da wird es benutzt um auf Formularelemente zuzugreifen, was in diesem Kontext einfach durch weglassen von eval genauso funktioniert.
selfhtml ist nicht perfekt.
Struppi.
Hallo Struppi,
Da muss ich Dir recht geben.
Dieter
Hallo,
Mach Dir ein kleines Funktiönchen, dass Deine Berechnungen übernimmt unter den entsprechenden Bedingungen, vielleicht schaust Du Dir mal http://selfhtml.teamone.de/javascript/beispiele/taschenrechner.htm an. Ob eval wirkilch evil ist, weiss ich leider nicht.
Das Taschenrechnerbeispiel hilft mir nicht wirklich weiter, weil ich zwar auf ungültige Zeichen Prüfen kann, nicht aber auf ungültige Formeln.
Aber trotzdem vielen Dank. :)
Maja
Hallo,
ich habe ein Textfeld, in welches man Formeln in der Form 16*(2+5.6) eingeben kann. Bei onBlur wird der Wert mittels "eval()" berechnet. Das ganze sieht im Prinzip wie folgt aus.
<input name="fld1" type="text" id="fld1" onBlur="this.value = eval(this.value)">
Nun möchte ich aber auch überprüfen, ob der eingegebene Wert auch ein berechenbarer Ausdruck ist. Dafür habe ich aber überhaupt noch keine Idee und wäre dankbar, wenn mir jemand mit einem Lösungsansatz auf die Sprünge helfen könnte.
Außerdem habe ich hier im Forum des öfteren gelesen "eval() ist böse" und läßt sich zu 99.9% vermeiden. Bezieht sich das auch auf meine Art der Verwendung von "eval()"? Und wenn ja, welche Alternativen habe ich?
eval ist zu 99.99999999% unnötig und eval ist evil.
weil es
a.) langsamer ist
b.) zu unvorhersehbaren Ergebnissen führen kann
und
c.) schwerer zu debuggen ist.
und du hast genau einen Fall in dem eval unvermeindbar ist. eval ist dafür gedacht zur Laufzeit dynamischen JS code auszuführen und das ist genau das was du willst.
Deine Möglichkeit wäre (evtl.) den Fehler abzufangen.
window.onerror = errHandler;
funtion errHandler(msg, file, zeile)
{
return true;
}
Das return true; verhindert, das der normale Error handler ausgeführt wird.
Struppi.
Hallo Struppi
»»
und du hast genau einen Fall in dem eval unvermeindbar ist. eval ist dafür gedacht zur Laufzeit dynamischen JS code auszuführen und das ist genau das was du willst.
»»
Da fällt mir ein Stein vom Herzen. :)
Deine Möglichkeit wäre (evtl.) den Fehler abzufangen.
window.onerror = errHandler;
funtion errHandler(msg, file, zeile)
{
return true;
}
Der Fluch der "Strg + C / Strg + V" Programmierung hat mal wieder zugeschlagen. Aber wenn man aus "funtion" "function" macht, funktioniert es auch. Danke nochmals. Ich hatte zwar eher was in der Richtung
if(eval(wert) == false) alert('huch');
gesucht, aber das scheint wohl nicht möglich zu sein.
Also besten Dank nochmals und liebe Grüße.
Maja
Moin Moin !
Vielleicht kannst Du das ja auch noch brauchen (ab Javascript 1.3):
var panne=false;
var ergebnis;
try {
/* Berechnung (zuweisung an ergebnis) hier */
} catch(error) {
panne=true;
} finally {
/* nix */
}
if (panne) {
alert('Panne! Das war unverdaulich.');
} else {
alert('Ergebnis: '+ergebnis);
}
Alexander