Nachrichtenscript Markierungen Javascript
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
abhilfe
anpassen
ausgeben
code
definiert code
element
fehler
feld
fenster
form
formular
funktion
http
liegen
markieren
nachricht
probier
suchen
url
variablen werte ausgeben
-
Hallo, ich hab ein kleines Problem.
Ich programmiere gerade ein Nachrichtenscript.
Mit einem Javascript kann man mit einem Kontrollkästchen alle Nachrichten markieren (wie hier bei Lima).
Mein Javascript sieht so aus:
<script type="text/javascript" language="JavaScript"> function selectAll(form,checked) { var x = document.mails.main.checked; for(var i=1;i<document.mails.length;i++) { document.mails.elements[i].checked = x; } } </script>
Der Fehler ist, man kann zwar alle markieren, aber klickt man nochmal auf das Kontrollkästchen passiert nichts mehr. Es sollte dann ja alle markierungen wieder weg gehen (wie hier bei Lima).
Könnt Ihr mir helfen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
wagnerm schrieb:
Aus der einen Funktion kann man nicht viel ausnehmen. Baue mal ein "alert" (oder mehrere) ein und lasse dir die Variablen-Werte ausgeben.
Was soll ich mir denn ausgeben lassen? -
zB die Variable x oder document.mails.elements.checked nach der Zuweisung. Vielleicht läuft da etwas schief...
-
wagnerm schrieb:
zB die Variable x oder document.mails.elements.checked nach der Zuweisung. Vielleicht läuft da etwas schief...
Ich habe das ins Script eingefügt.
<script type="text/javascript" language="JavaScript"> alert(x); alert(document.mails.elements.checked); </script>
Aber es wird nichts ausgegeben, auch kein Javascript Fenster öffnet sich -
Ich meinte, dass du dir die Variablen während der Verarbeitung in der Funktion ausgeben lassen solltest. Probier mal das:
<script type="text/javascript" language="JavaScript"> function selectAll(form,checked) { var x = document.mails.main.checked; alert(x); for(var i=1;i<document.mails.length;i++) { document.mails.elements[i].checked = x; // für jedes Element erfolgt eine Anzeige // wenn es sehr viele sind, dann probier statt dem [i] einfach ein [1] für eine exemplarische Ausgabe alert(document.mails.elements[i].checked); } } </script>
-
wagnerm schrieb:
Ich meinte, dass du dir die Variablen während der Verarbeitung in der Funktion ausgeben lassen solltest. Probier mal das:
<script type="text/javascript" language="JavaScript"> function selectAll(form,checked) { var x = document.mails.main.checked; alert(x); for(var i=1;i<document.mails.length;i++) { document.mails.elements[i].checked = x; // für jedes Element erfolgt eine Anzeige // wenn es sehr viele sind, dann probier statt dem [i] einfach ein [1] für eine exemplarische Ausgabe alert(document.mails.elements[i].checked); } } </script>
OK, jetzt kam was ;)
Es kamen 4 Fenster mit dem Inhalt "true"
Beitrag zuletzt geändert: 31.3.2010 10:35:27 von davy -
Wenn 4x true ausgegeben wurde, nehme ich an, dass es drei Checkboxen sind. Richtig?
Wenn ja, dann liegt der Fehler wo anders, weil alles funktioniert.
Wenn nein, muss der Fehler in der Funktion liegen. -
wagnerm schrieb:
Wenn 4x true ausgegeben wurde, nehme ich an, dass es drei Checkboxen sind. Richtig?
Wenn ja, dann liegt der Fehler wo anders, weil alles funktioniert.
Wenn nein, muss der Fehler in der Funktion liegen.
Ja, es sind 3 Checkboxen.
Wo kann der Fehler noch liegen? -
Eigentlich überall nach dem Funktionsaufruf, da bis dort hin alles funktioniert...
-
wagnerm schrieb:
Eigentlich überall nach dem Funktionsaufruf, da bis dort hin alles funktioniert...
Das Problem besteht immernoc.
Hat noch jemand eine Idee? -
Vielleicht wäre es für die Community hilfreich, wenn Du auch erwähnst, dass Du mit dem JavaScript die Boxen markieren möchtest, die Du in diesem PHP Thread (http://www.lima-city.de/thread/php-nachrichtenscript) meinst.
Dort hast Du das Input-Feld wie folgt definiert:
<td class='nachrichten'><input type='checkbox' name='mails[]' value='$Id' /></td>
Das "mails" Feld ist später ein Array.
Folgendes könnte Abhilfe schaffen (so klappts bei mir):
<script type="text/javascript"> var Marker = false; function checkAllBoxes() { if (Marker==false) {check=true; Marker = true;} else {check = false; Marker=false;} for (i = 0; i < document.forms.admin.elements['mails[]'].length; i++) { document.forms.admin.elements['mails[]'][i].checked = check; } } </script>
-
rnitsche schrieb:
Vielleicht wäre es für die Community hilfreich, wenn Du auch erwähnst, dass Du mit dem JavaScript die Boxen markieren möchtest, die Du in diesem PHP Thread (http://www.lima-city.de/thread/php-nachrichtenscript) meinst.
Dort hast Du das Input-Feld wie folgt definiert:
<td class='nachrichten'><input type='checkbox' name='mails[]' value='$Id' /></td>
Das "mails" Feld ist später ein Array.
Folgendes könnte Abhilfe schaffen (so klappts bei mir):
<script type="text/javascript"> var Marker = false; function checkAllBoxes() { if (Marker==false) {check=true; Marker = true;} else {check = false; Marker=false;} for (i = 0; i < document.forms.admin.elements['mails[]'].length; i++) { document.forms.admin.elements['mails[]'][i].checked = check; } } </script>
Das Javascript funktioniert leider nicht. Wenn ich die Checkbox, mit der alle anderen Checkboxen markiert werden, anklicke, passiert nichts.
Für alle: Es handelt sich um die Checkboxen aus dem Thread: http://www.lima-city.de/thread/php-nachrichtenscript -
1:1 kopieren funktioniert da auch nicht! Ich kann schlecht sehen, wie Dein Formular aussieht.
1.) Bei Dir oben hieß die Funktion noch selectAll(form,checked), bei mir im Beispiel checkAllBoxes(). Du musst also entweder den Funktionsnamen oder den Aufruf anpassen
2) Mein Skript sucht nach dem Element "mails[]" welches im Formular names "admin" steht. Mein Formular wird folgendermaßen definiert:<form name='admin' method='post' etc>
-
rnitsche schrieb:
1:1 kopieren funktioniert da auch nicht! Ich kann schlecht sehen, wie Dein Formular aussieht.
1.) Bei Dir oben hieß die Funktion noch selectAll(form,checked), bei mir im Beispiel checkAllBoxes(). Du musst also entweder den Funktionsnamen oder den Aufruf anpassen
2) Mein Skript sucht nach dem Element "mails[]" welches im Formular names "admin" steht. Mein Formular wird folgendermaßen definiert:<form name='admin' method='post' etc>
Mein Formular sieht so aus:
... <form action='' method='post'> <table width='559'> <tr class='nachrichten'> <th class='nachrichten'> <input type='checkbox' name='main' onclick='javascript:selectAll(mails,true);' value='ON' /></th> <th class='nachrichten'> Titel</th> <th class='nachrichten'> Datum</th> <th class='nachrichten'> Absender</th> </tr> ... <tr class='nachrichten'> <td class='nachrichten'><input type='checkbox' name='mails[]' value='$Id' /></td> <td class='nachrichten'><a href='nachricht_lesen.php?id=$Id'><b>$betreff</b></a></td> <td class='nachrichten'><b>$date</b></td> <td class='nachrichten'><a href='profil.php?id=$userid'><b>$sender</b></a></td> </tr> ... </form>
Und die Checkbox zum Markieren aller Nachrichten:
echo "<input type='submit' name='delpn1' value='Markierte Nachrichten löschen'>";
Momentan sieht mein Javascript so aus, es funktioniert aber nicht:
<script type="text/javascript"> var Marker = false; function selectAll(form,checked) { if (Marker==false) {check=true; Marker = true;} else {check = false; Marker=false;} for (i = 0; i < document.main.elements['mails[]'].length; i++) { document.main.elements['mails[]'][i].checked = check; } } </script>
-
Da ist immer noch der Wurm drin, da einiges unstrukturiert ist. Probier mal folgenden Vorschlag:
das Formular (gekürzt auf das Wesentliche):
<html> <head> <script type="text/javascript"> var Marker = false; // steht diese Variable auf false, wird davon ausgegangen, dass die Checkboxen erst abgewählt sind und durch den ersten Klick alle angeklickt werden sollen (sonst genau andersherum) function selectAll(formular) { if (Marker==false) {check=true; Marker = true;} else {check = false; Marker=false;} for (i = 0; i < formular.elements['mails[]'].length; i++) { formular.elements['mails[]'][i].checked = check; } } </script> </head> <body> <form action='' method='post' name='main'> <input type='checkbox' name='selectBoxes' onclick='selectAll(main);' value='ON' /> <input type='checkbox' name='mails[]' value='$Id' /> <!-- Für jede Nachricht eine Checkbox mit der aktuellen ID --> </form> </body> </html>
-
Danke. Aber irgendwie gehts immernoch nicht.
Mein Javascript lautet:
<script type="text/javascript"> var Marker = false; // steht diese Variable auf false, wird davon ausgegangen, dass die Checkboxen erst abgewählt sind und durch den ersten Klick alle angeklickt werden sollen (sonst genau andersherum) function selectAll(formular) { if (Marker==false) {check=true; Marker = true;} else {check = false; Marker=false;} for (i = 0; i < formular.elements['mails[]'].length; i++) { formular.elements['mails[]'][i].checked = check; } } </script>
Checkbox:
<form name='formular' action='' method='post'> <table width='559'> <tr class='nachrichten'> <th class='nachrichten'> <input type='checkbox' name='selectBoxes' onclick='selectAll(main);' value='ON' /></th> <th class='nachrichten'> Titel</th> <th class='nachrichten'> Datum</th> <th class='nachrichten'> Absender</th> </tr>
Checkbox für jede Nachricht:
<input type='checkbox' name='mails[]' value='$Id' />
-
Dein Formular muss 'main' heißen, so wie es vorher war.
<form .... name='main'>
oder aber den Funktionsaufruf anpassen
onclick="selectAll(Formularname)"
und alles muss in eine Datei, nicht trennen! -
rnitsche schrieb:
Dein Formular muss 'main' heißen, so wie es vorher war.
<form .... name='main'>
oder aber den Funktionsaufruf anpassen
onclick="selectAll(Formularname)"
und alles muss in eine Datei, nicht trennen!
Danke, jetzt klappt alles
EDIT: Ich merke gerade, dass, wenn nur 1 Nachricht da ist, das Checkfeld, was eigentlich diese eine Nachricht auswählen sollte, nicht funktioniert. Ab 2 Nachrichten geht es allerdings.
Beitrag zuletzt geändert: 31.3.2010 23:37:58 von davy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage