kleines problemchen....
timur
- javascript
hallo,
ich will den wert eines textfeldes in abhängigkeit von einem anderen textfeld ausgeben lassen.
wenn der code folgendermaßen aussieht klappt es:
function rechne()
{
var e = document.getElementById("bmenge");
e.value="4";
}
Mit dem Code, möchte ich prüfen was eingegeben wurde, um so den wert des textfeldes zu kontrollieren. aber irgendwie klappt es nicht...
function rechne()
{
var d = document.getElementById("amenge");
var e = document.getElementById("bmenge");
if(d.value = 3)
{
e.value = "22"
}
if(d.value = 1)
{
e.value = "55"
}
}
Und hier der HTML Code:
<input type="text" id="amenge" class="style_18" onkeyup="rechne()" />
<br />
<input type="text" id="bmenge" class="style_18" />
Schonmal vielen Dank für Eure Antworten und Hilfen.
Wünsche Euch noch ein schönen sonnigen Samstag.
LG
Timur
Hi,
Mit dem Code, möchte ich prüfen was eingegeben wurde, um so den wert des textfeldes zu kontrollieren. aber irgendwie klappt es nicht...
und Du wunderst Dich nicht, dass der Wert des Eingabefeldes mit der ID "amenge" anschließend immer 1 lautet?
Cheatah
schau nochmals in das Kapitel http://de.selfhtml.org/javascript/sprache/operatoren.htm#vergleich@title=Vergleichsoperatoren.
hallo gast42,
jaja, ein gleichheitszeichen zu wenig.....
mich ärgert gerade noch was:
ich habe auf einer seite 1 textfeld dort gebe ich ja eine zahl ein. auf der gleichen seite habe ich ca. 20 checkboxen.
wie kann ich es dazu bringen, das wenn z.b. im textfeld die zahl 4 eingegeben wurde, das dabei wenn man vier checkboxen ausgewählt hat die restlichen dann ausgeblendet werden.
lg
timur
wie kann ich es dazu bringen, das wenn z.b. im textfeld die zahl 4 eingegeben wurde, das dabei wenn man vier checkboxen ausgewählt hat die restlichen dann ausgeblendet werden.
Event, der die textfeldänderung erkennt
Auslesen des textfeldes, Umwandeln in Integer
per getElementsByName eine Referenz auf die Checkboxen besorgen
Der Reihe nach durchgehen, dabei bis zur ermittelten Zahl zählen
Alle anderen ausblenden oder löschen
Hallo,
Event, der die textfeldänderung erkennt
gemacht...
Auslesen des textfeldes, Umwandeln in Integer
gemacht...
per getElementsByName eine Referenz auf die Checkboxen besorgen
gemacht...
Der Reihe nach durchgehen, dabei bis zur ermittelten Zahl zählen
??? stehe hier auf dem Schlauch ???
hier mein code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
/* <![CDATA[ */
function ankreuzen()
{
var e = parseImt(document.getElementById("bmenge"));
var k = document.getElementsByName("cb")[0];
if(...){
}
}
/* ]]> */
</script>
</head>
<body>
<div>
Gewünschte Anzahl der Fotos: <input type="text" id="amenge" onkeyup="arechne()" /><br />
Gewünschte Anzahl der Fotos: <input type="text" id="bmenge" onkeyup="brechne()" />
</div>
<div>
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="ankreuzen()" /><br />
</div>
</body>
</html>
LG
Timur
Hi,
Der Reihe nach durchgehen, dabei bis zur ermittelten Zahl zählen
??? stehe hier auf dem Schlauch ???
Wo denn nicht? [1]
Was eine Schleife ist, wirst du doch wohl wissen ...
[1] Du scheinst auf ziemlich vielen Baustellen gleichzeitig zu tanzen - warum beschäftigst du dich nicht erst mal mit einem Thema wenigstens soweit, dass du eine grundlegende Ahnung davon hast?
MfG ChrisB
hallo,
[1] Du scheinst auf ziemlich vielen Baustellen gleichzeitig zu tanzen - warum beschäftigst du dich nicht erst mal mit einem Thema wenigstens soweit, dass du eine grundlegende Ahnung davon hast?
das problem ist, dass es eine einmalige geschichte sein wird, womit mich im zukunft nie mehr auseinanderstezen werde. das ganze hat micht schon ca. 4 wochen zeit gekostet. nun will ich es zu ende bringe.
mit der schleife bin ich jetzt mittlerweile so weit gekommen, aber das ist auch nicht fas wahre...:
function ankreuzen()
{
var e = parseInt(document.getElementById("bmenge"));
var k = document.getElementsByName("cb");
if(k[0].checked == true)
{
k[1].disabled = true;
}
}
so kann ich es ja steuern, aber wie kriege ich die blöde variable e mit ins spiel?
gruß
timur
Hi,
mit der schleife bin ich jetzt mittlerweile so weit gekommen, aber das ist auch nicht fas wahre...:
das liegt daran, dass da nicht mal der Hauch eines Ansatzes des Schattens einer Schleife zu finden ist.
Cheatah
hallo,
ich glaube ich habe mich falsch ausgedrückt.
was ich meinte ist folgendes:
ich habe 10 checkboxen. es dürfen nur 3 checkboxen ausgewählt werden. wenn 3 checkboxen ausgwählt sind sollen die restlichen 7 checkboxen deaktivert (disabled) werden.
was noch hinzukommen soll ist folgendes:
wenn ich von den 3 checkboxen die ich ausgewählt habe einen wieder deaktiviere sind es ja 2 checkboxen die aktiviert sind, dabei sollen die checkboxen die deaktiviert wurden wieder aktiv sein.
gruß
timur
Hi,
was ich meinte ist folgendes:
das ist Dein Ziel. Wie lautet Dein Problem?
Cheatah
hi
das ist Dein Ziel. Wie lautet Dein Problem?
mein problem:
1. wie kriege ich die checkboxen disabled, die nicht aktiviert sind. wenn von 10 nur 3 ausgewählt werden dürfen.
2. wenn ich von den 3 ausgewählten cb einen wieder deaktiviere sollen die 7 cb die disabled waren wieder disabled = false sein.
Gruß Timur
Hi,
mein problem:
Schwervonbegriffigkeit?
Jetzt wiederholst du schon wieder nur, was du vor hast = dazu, wo dein *Problem* dabei liegt, immer noch kein Wort.
- wie kriege ich die checkboxen disabled, die nicht aktiviert sind. wenn von 10 nur 3 ausgewählt werden dürfen.
Der Ansatz wurde dir bereits genannt - in einer Schleife drüber laufen, und machen.
- wenn ich von den 3 ausgewählten cb einen wieder deaktiviere sollen die 7 cb die disabled waren wieder disabled = false sein.
Ebenfalls mit einem Schleifchen.
MfG ChrisB
Jetzt wiederholst du schon wieder nur, was du vor hast = dazu, wo dein *Problem* dabei liegt, immer noch kein Wort.
mein problem liegt in der schleife...
habe es mit einer if schleife so versucht,
function ankreuzen()
{
var e = parseInt(document.getElementById("bmenge").value);
var k = document.getElementsByName("cb");
if(k[0].checked == true)
{
var i = 0;
for(i; i<=k.length; i++)
{
k[i].disabled = true;
}
}
}
man sieht ja das ergebnis, wenn das erste checkbox angeklickt ist, sind ja die anderen checkboxen und der angeklickte checkbox disabled.. aber ich will ja mindestens 3 auswählen....
gruß
timur
Hi,
mein problem liegt in der schleife...
habe es mit einer if schleife so versucht,
Es gibt keine "IF-Schleifen".
man sieht ja das ergebnis, wenn das erste checkbox angeklickt ist, sind ja die anderen checkboxen und der angeklickte checkbox disabled.. aber ich will ja mindestens 3 auswählen....
Dann zähle ab, ob bereits drei Checkboxen angekreuzt sind.
MfG ChrisB
hi
Dann zähle ab, ob bereits drei Checkboxen angekreuzt sind.
naja, das ist mir ja auch eingefallen, aber in javascript kann ich doch nicht einfach if(count(k)=3){...} schreiben. geht nicht.
gruß
timur
Hi,
Dann zähle ab, ob bereits drei Checkboxen angekreuzt sind.
naja, das ist mir ja auch eingefallen, aber in javascript kann ich doch nicht einfach if(count(k)=3){...} schreiben. geht nicht.
Davon abgesehen, dass = immer noch der Zuweisungsoperator ist, was du letztens eigentlich schon gelernt haben solltest, könntest du natürlich schon - wenn du dir eine entsprechende Funktion count() schreibst.
Aber lass uns mal überlegen, wie das Zählen an sich in JavaScript generell gehen könnte ... wenn du ein bisschen mitdenkst, dann kommen wir schnell wieder zu dem zurück, was Cheatah und ich dir hier schon die ganze Zeit nahezulegen versuchen: Schleifen.
MfG ChrisB
Aber lass uns mal überlegen, wie das Zählen an sich in JavaScript generell gehen könnte ... wenn du ein bisschen mitdenkst, dann kommen wir schnell wieder zu dem zurück, was Cheatah und ich dir hier schon die ganze Zeit nahezulegen versuchen: Schleifen.
so, habe jetzt mir eine for schleife aufgebaut.
sehe den fehler nicht, warum es nicht klappt.
function aankreuzen()
{
var k = document.getElementsByName("cb");
var i = 0;
for(i; i<=k.length; i++)
{
var NewCount = 0;
if (document.cbm.k[i].checked){NewCount = NewCount + 1}
}
if (NewCount == 3){alert('schon drei ausgewählt')}
}
gruß
timur
Hi,
so, habe jetzt mir eine for schleife aufgebaut.
sehe den fehler nicht, warum es nicht klappt.
Wenn du die Variable, die du als Zähler für die Anzahl der angekreuzten Elemente benutzen willst, *innerhalb* der Schleife immer wieder auf 0 setzt, darfst du dich nicht wundern, wenn ihr Wert nach der Schleife nicht signifikant grösser als maximal 1 ist.
MfG ChrisB
habe die funktion jetzt so umgeschrieben das count außerhalb der schleife ist:
function aankreuzen()
{
var k = document.getElementsByName("cb");
var NewCount = 0;
for(var i = 0; i<=k.length; i++)
{
if (document.cbm.k[i].checked){NewCount = NewCount + 1;}
}
if (NewCount == 3){alert('schon drei ausgewählt')}
}
Hier nochmal der HTML CODE:
<form name="cbm">
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
.
.
.
Leider kommt in IE nicht das alert fenster sondern der javascript fehler "objekt erwartet"
gruß
timur
Hi,
var k = document.getElementsByName("cb");
Hier besorgst du dir eine "Liste" aller (Formular-)Elemente mit dem Namen "cb".
for(var i = 0; i<=k.length; i++)
{
if (document.cbm.k[i].checked){NewCount = NewCount + 1;}
Warum greifst du hier nicht dann auch über die Variable k, in der du dir diese Liste abgelegt hast, darauf zu?
Leider kommt in IE nicht das alert fenster sondern der javascript fehler "objekt erwartet"
K.A., ob's daran liegt oder noch an was anderem, lässt sich aus dem Code scherlich erkennen.
MfG ChrisB
hi,
Warum greifst du hier nicht dann auch über die Variable k, in der du dir diese Liste abgelegt hast, darauf zu?
das verstehe ich jetzt nicht...
damit man mich besser versteht stelle ich hier den code rein, was ich bis jetzt habe:
vielleicht sieht ihr den fehler...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
/* <![CDATA[ */
function arechne()
{
var d = document.getElementById("amenge");
var e = document.getElementById("bmenge");
if(d.value == 0) {e.value = "5";}
if(d.value == 1) {e.value = "4";}
if(d.value == 2) {e.value = "3";}
if(d.value == 3) {e.value = "2";}
if(d.value == 4) {e.value = "1";}
if(d.value == 5) {e.value = "0";}
if(d.value >= 6) {e.value = "??";}
if(d.value <= -1) {e.value = "??";}
}
function brechne()
{
var d = document.getElementById("amenge");
var e = document.getElementById("bmenge");
if(e.value == 0) {d.value = "5";}
if(e.value == 1) {d.value = "4";}
if(e.value == 2) {d.value = "3";}
if(e.value == 3) {d.value = "2";}
if(e.value == 4) {d.value = "1";}
if(e.value == 5) {d.value = "0";}
if(e.value >= 6) {d.value = "??";}
if(e.value <= -1) {d.value = "??";}
}
function ankreuzen()
{
var e = parseInt(document.getElementById("bmenge").value);
var k = document.getElementsByName("cb");
if(k[1].checked == true)
{
var i = 0;
for(i; i<=k.length; i++)
{
k[i].disabled = true;
}
}
function aankreuzen()
{
var k = document.getElementsByName("cb");
var NewCount = 0;
for(var i = 0; i<=k.length; i++)
{
if (k[i].checked == true){NewCount = NewCount + 1;}
}
if (NewCount == 3){alert('schon drei ausgewählt')}
}
/* ]]> */
</script>
</head>
<body>
<div>
Gewünschte Anzahl der Fotos: <input type="text" id="amenge" onkeyup="arechne()" /><br />
Gewünschte Anzahl der Fotos: <input type="text" id="bmenge" onkeyup="brechne()" />
</div>
<div>
<form id="cbm" name="cbm">
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
</form>
</div>
</body>
</html>
gruß
timur
Hi,
Warum greifst du hier nicht dann auch über die Variable k, in der du dir diese Liste abgelegt hast, darauf zu?
das verstehe ich jetzt nicht...
Willst du mich veräppeln?
Genau das, was ich in dem Code-Ausschnitt, den du zuvor gepostet hattest, bemängelt hatte, hast du doch jetzt in dem Code den du aktuell zeigst bereits ersetzt.
Statt deiner zig-zeilen-If-Konstrukte solltest du dir mal bspw. switch anschauen.
Und die Abbruchbedingung deiner Schleifen ist immer noch fehlerhaft, darauf wies Martin dich bereits hin. Und daran könnte es auch liegen, dass der IE dir "Objekt erwartet" meldet.
MfG ChrisB
hi,
die if konstrunkte bei den funktionen arechne brechne sind nicht das problem.
ich hatte nach der funktion anzeigen() das schließende } vergessen...
die habe ich ja mitlerweile gelöscht, weil ich das ja nicht gebrauche jetzt.
Hi,
die if konstrunkte bei den funktionen arechne brechne sind nicht das problem.
Von denen war ja auch nicht die Rede, sondern von den Schleifen.
MfG ChrisB
ich habe mir gerade die seite von selfhtml mit switch angeguckt. ich sehe da keinen vorteil gegenüber von if.
was hilft mir das wenn ich switch(...) schreibe und dann die fallunterscheidung
case(...)
was sollte ich denn in switch reinschreiben??? das blicke ich gerade nicht durch.
gruß
timur
so nun habe ich die switch anweisung anstelle von der in anweisung..
was mache ich hier nun falsch?
function aankreuzen()
{
var k = document.getElementsByName("cb");
var NewCount = 0;
var NewCountB = 0;
for(var i = 0; i<=k.length; i++)
{
switch(k[i])
{
case "checked = true":
NewCount = NewCount + 1;
break;
case "checked = false":
NewCountB = NewCountB + 1;
break;
}
if (NewCount == 3){alert('schon drei ausgewählt')}
}
}
gruß
timur
Hi,
so nun habe ich die switch anweisung anstelle von der in anweisung..
was mache ich hier nun falsch?
Du setzt sie vollkommen blödsinnig ein - und auch nicht an der Stelle, an die ich gedacht hatte (ich meinte in deinen Funktionen arechne/brechne, die mehrere Zeilen If für die Werte von 1 bis 6).
switch(k[i]) { case "checked = true":
Beim Switch komme ein Ausdruck rein, und bei den Cases dann die verschiedenen Ausprägungen, die dieser annehmen kann - das zeigt das Beispiel in SELFHTML und die zugehörige Erklärung doch auch recht deutlich.
MfG ChrisB
naja gut,
wie sieht es mit der funktion aanzeigen() aus..?? warum klappt es nicht. jetzt abgesehen davon dass ich da diesen switch scheiß da rein gemacht habe. habe ich mittlerweile wieder rausgenommen....
gruß
timur
hallo
ich hatte gerade meinen fehler gesehen, und habe es jetzt weggemacht...
aber nun habe ich das problem, wenn ich auf ein checkbox klicke, dass alle mit angeklickt sind und diese fehlermeldung in ie kommt:
" 'undefinded' ist null oder kein objekt "
und in ff kommt diese fehlermeldnung:
k[i] has no properties
zeile: if (k[i].checked = true){NewCount = NewCount + 1;}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
/* <![CDATA[ */
function arechne()
{
var d = document.getElementById("amenge");
var e = document.getElementById("bmenge");
if(d.value == 0) {e.value = "5";}
if(d.value == 1) {e.value = "4";}
if(d.value == 2) {e.value = "3";}
if(d.value == 3) {e.value = "2";}
if(d.value == 4) {e.value = "1";}
if(d.value == 5) {e.value = "0";}
if(d.value >= 6) {e.value = "??";}
if(d.value <= -1) {e.value = "??";}
}
function brechne()
{
var d = document.getElementById("amenge");
var e = document.getElementById("bmenge");
if(e.value == 0) {d.value = "5";}
if(e.value == 1) {d.value = "4";}
if(e.value == 2) {d.value = "3";}
if(e.value == 3) {d.value = "2";}
if(e.value == 4) {d.value = "1";}
if(e.value == 5) {d.value = "0";}
if(e.value >= 6) {d.value = "??";}
if(e.value <= -1) {d.value = "??";}
}
function aankreuzen()
{
var k = document.getElementsByName("cb");
var NewCount = 0;
for(var i = 0; i<=k.length; i++)
{
if (k[i].checked = true){NewCount = NewCount + 1;}
}
if (NewCount == 3){alert('schon drei ausgewählt')}
}
/* ]]> */
</script>
</head>
<body>
<div>
Gewünschte Anzahl der Fotos: <input type="text" id="amenge" onkeyup="arechne()" /><br />
Gewünschte Anzahl der Fotos: <input type="text" id="bmenge" onkeyup="brechne()" />
</div>
<div>
<form id="cbm" name="cbm">
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
<input type="checkbox" name="cb" onclick="aankreuzen()" /><br />
</form>
</div>
</body>
</html>
gruß
timur
Hi,
aber nun habe ich das problem, wenn ich auf ein checkbox klicke, dass alle mit angeklickt sind und diese fehlermeldung in ie kommt:
" 'undefinded' ist null oder kein objekt "
und in ff kommt diese fehlermeldnung:
k[i] has no properties
Siehe Martins Antwort; siehe meine Antwort, in der ich gerade noch mal auf Martins Hinweis hinwies ...
MfG ChrisB
Mahlzeit timur,
zeile: if (k[i].checked = true){NewCount = NewCount + 1;}
Wie oft willst Du jetzt eigentlich noch diesen Fehler machen? Sooo schwer ist der Unterschied zwischen http://de.selfhtml.org/javascript/sprache/operatoren.htm#zuweisung@title=Zuweisungsoperator und http://de.selfhtml.org/javascript/sprache/operatoren.htm#vergleich@title=Vergleichsoperator doch nicht ...
MfG,
EKKi
@@EKKi:
»» zeile: if (k[i].checked = true){NewCount = NewCount + 1;}
Wie oft willst Du jetzt eigentlich noch diesen Fehler machen? Sooo schwer ist der Unterschied zwischen http://de.selfhtml.org/javascript/sprache/operatoren.htm#zuweisung@title=Zuweisungsoperator und http://de.selfhtml.org/javascript/sprache/operatoren.htm#vergleich@title=Vergleichsoperator doch nicht ...
Und wie oft wollen Leute jetzt eigentlich noch diese Unsinnigkeit machen, boolsche Werte gegen true
zu vergleichen? Sooo schwer ist einen boolschen Wert als Bedingung anzusehen doch nicht ...
Live long and prosper,
Gunnar
Und wie oft wollen Leute jetzt eigentlich noch diese Unsinnigkeit machen, boolsche Werte gegen
true
zu vergleichen?
Nicht-boolsche Werte müssen in if (...) auch nicht gegen true verglichen werden, das werden sie ebenfalls automatisch nach Umwandlung des Ergebnis-Ausdrucks in Boolean.
Mathias
Hallo,
so, habe jetzt mir eine for schleife aufgebaut.
sehe den fehler nicht, warum es nicht klappt.
meine Güte, su solltest doch inzwischen verstanden haben, dass "klappt nicht" nicht hilfreicher ist als "tut weh" oder "Wow!".
function aankreuzen()
{
var k = document.getElementsByName("cb");
var i = 0;
for(i; i<=k.length; i++)
Ups. Seltsame Konstruktion - üblicherweise setzt man die Initialisierung der Schleifenvariablen in die for-Klammer. Sie so herauszuziehen, wie du es hier machst, ist nicht falsch, aber auch nicht sinnvoll.
Falsch ist aber deine Ende-Bedingung für die Schleife, sie zählt genau ein Element zu weit.
{
var NewCount = 0;
if (document.cbm.k[i].checked){NewCount = NewCount + 1}
}
Hehe. ;-)
Das Erhöhen kann man natürlich einfacher als NewCount++ schreiben. Aber das ist sinnlos, wenn du NewCount in jedem Schleifendurchlauf wieder auf 0 setzt.
if (NewCount == 3){alert('schon drei ausgewählt')}
Deswegen kommst du auch nie auf die 3.
So long,
Martin
Hallo Timur,
ich würde das so lösen:
http://molily.de/temp/checkboxLimit.html
Erstmal die Voraussetzungen:
init - Startfunktion, die beim erfolgreichen Laden des Dokuments ausgeführt wird
aktualisiere - Helferfunktion, die die Checkboxen durchgeht und den disabled-Status aktualisiert
checkboxKlick - Event-Handler, der alle Klicks in der Checkboxen-Liste verarbeitet
limitÄnderung - Event-Handler, der die Änderung des Limit-Feldes überwacht
Okay, was machen die Funktionen?
init:
Registriere die Event-Handler für die entsprechenden Elemente
checkboxKlick:
Zuerst wird geschaut, ob es sich beim angeklickten Element um ein input-Feld handelt. Wenn nicht, bricht die Funktion ab, schließlich soll sie nur Klicks auf die Checkboxen verarbeiten.
Dann wird das Limit aus dem entsprechenden Feld ausgelesen. Wenn keines angegeben ist, wird eine Meldung ausgegeben und die Funktion bricht ab.
Wenn ein korrektes Limit eingegeben wurde, wird es in der Eigenschaft limit des Container-Objektes checkboxLimit gespeichert. Schließlich wrd aktualisiere aufgerufen.
limitÄnderung:
Wert des Feldes wird ausgelesen. Wenn der brauchbar ist, wird aktualisiere aufgerufen.
aktualisiere:
Hole die Liste der Checkboxen mit getElementsByName. Speichere die in der Eigenschaft checkboxLimit.cbListe. Wenn in der Eigenschaft schon etwas drinsteht, wird getElementsByName nicht nochmal aufgerufen, sondern dieser Zwischenspeicher verwendet.
Durchlaufe die Checkbox-Liste. Erhöhe einen Zähler, wenn ein angekreuztes Feld gefunden wird. Nicht angekreuzte Felder werden in einem Array abgespeichert.
Prüfe anschließend, ob das Limit erreicht wurde, also die gezählten angekreuzten Felder so groß sind wie das Limit.
Jetzt durchlaufe den gerade angelegten Array mit allen nicht angekreuzten Feldern. Graue sie aus, wenn das Limit erreicht wurde, gebe sie frei, wenn das Limit noch nicht erreicht wurde.
Mathias
Hallo molily,
if (limit === NaN)
Das geht so aber nicht. NaN ist nicht mal zu sich selbst gleich, d.h. nichts kann sinnvoll mit NaN verglichen werden:
alert(NaN===NaN);
//gibt false
aus.
Du meintest sicher:
if (isNaN(limit))
Stimmt's?
Gruß, Don P
NaN ist nicht mal zu sich selbst gleich
Wie beknackt ist das denn!
Jeder Vergleich mit NaN ergibt false: http://bclary.com/log/2004/11/07/#a-11.9.3
Macht für mich überhaupt keinen Sinn.
Mathias
Hallo,
Wie beknackt ist das denn!
Jeder Vergleich mit NaN ergibt false: http://bclary.com/log/2004/11/07/#a-11.9.3
Macht für mich überhaupt keinen Sinn.
Ja: klingt komisch, iss aber so. :-))
NaN ist wohl sowas wie ein absolut ungültiges bzw. unerwünschtes Ergebnis, und soll niemals zu true
mutieren, sonst könnte ja unter Umständen der Verdacht aufkommen, dass es doch irgendwie gültig oder brauchbar ist...
Gruß, Don P
Hi,
Wie beknackt ist das denn!
Jeder Vergleich mit NaN ergibt false: http://bclary.com/log/2004/11/07/#a-11.9.3
Macht für mich überhaupt keinen Sinn.Ja: klingt komisch, iss aber so. :-))
NaN ist wohl sowas wie ein absolut ungültiges bzw. unerwünschtes Ergebnis, und soll niemals zu
true
mutieren, sonst könnte ja unter Umständen der Verdacht aufkommen, dass es doch irgendwie gültig oder brauchbar ist...
Eben, die Logik dahinter ist nicht so abwegig.
Nimm mal an, du hättest zwei - unbeabsichtigt - "ungültige" mathematische Berechnungen in deinem Script, und würdest deren Ergebnisse miteinander vergleichen, um etwas davon abhängig zu machen. Das könnte schnell in Teufels Küche führen ...
isNAN ist damit sowas ähnliches wie NULL im SQL-Umfeld - auch das kannst du ja vergleichen mit was du willst, es wird nie true ergeben. (Allerdings auch kein false, sondern wieder NULL.)
MfG ChrisB
Nimm mal an, du hättest zwei - unbeabsichtigt - "ungültige" mathematische Berechnungen in deinem Script, und würdest deren Ergebnisse miteinander vergleichen, um etwas davon abhängig zu machen.
Klar: In einem Term soll NaN immer »zerstörerisch« sein und sich durchsetzen, also (grob gesagt) bei jeder Operator, bei dem NaN Operand ist, kommt NaN heraus, damit das Ergebnis des ganzen Terms auch NaN ist, sobald irgendwo ein Fehler auftrat. So kann der Programmierer sehen, dass irgendwo ein Fehler aufgetreten ist.
Andererseits macht diese Idee gerade bei den Vergleichsoperatoren m.M.n. keinen Sinn. Deren Ergebnis ist immer Boolean, da sehe ich doch vom irgendwo auftretenden NaN und damit vom möglicherweise auftretenden Fehler gar nichts mehr.
5 == 6 > false // Annahme: Werte sind ungleich, also ist hier das erwartete passiert
5 == NaN > false // Fehler, aber Prüfung bestanden > irreführend
NaN == NaN > false // Fehler, aber Prüfung bestanden > irreführend
Dein Beispiel erklärt, warum NaN bei anderen (arithmetischen) Operatoren zerstörerisch wirkt. Die Regel, dass der Vergleichsoperator beim Vergleich mit NaN immer false zurückgibt, hilft aber nur wenig weiter. Sie hilft nur in dem Fall, dass *beide* Operatoren unabhängig voneinander ungültig (NaN) werden *und* man vermutet, dass sie gleich sind.
Mathias
Hi,
Dein Beispiel erklärt, warum NaN bei anderen (arithmetischen) Operatoren zerstörerisch wirkt. Die Regel, dass der Vergleichsoperator beim Vergleich mit NaN immer false zurückgibt, hilft aber nur wenig weiter. Sie hilft nur in dem Fall, dass *beide* Operatoren unabhängig voneinander ungültig (NaN) werden *und* man vermutet, dass sie gleich sind.
Ja, eben.
Nimm an, du berechnest "5 mal Elephant" und "Krokodil minus 13" - ohne beabsichtigt zu haben, dass deine Berechnungen mit derart unsinnigen Werten arbeiten - und möchtest vom Vergleich des Ergebnisses dieser beiden Berechnungen abhängig machen, ob dein Script etwas bestimmtes tut.
Das *soll* es natürlich nur, wenn die eine Berechnung bspw. 3*4 und die andere 6*2 war, also 12==12, OK, gebe die Codes für die Atomrakten heraus.
Wenn NaN==NaN wäre, dann würde das Script das auch tun, wenn es nur mit reichlich unsinnigen Eingabedaten gefüttert würde - obwohl dieses Verhalten nicht im geringsten beabsichtigt wäre.
Klar, das Beispiel ist an den Haaren herbeigezogen, und klar, man *könnte* vorher beide Ergebnisse erst mal auf Plausibilität prüfen, ob sie also wenigstens nicht NaN sind - aber daran denkt der Scriptersteller ja vielleicht nicht immer.
Und deshalb sehe diese Definition für das Verhalten des Vergleiches von NaN als eine beabsichtigte Vorsichtsmaßnahme, ähnlich wie beim bereits erwähnten Verhalten von NULL in SQL, wo NULL ja idR. auch für einen ausserordentlichen, "nicht normalen" Wert steht.
MfG ChrisB