PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Checkbox deselektieren



clumsy
12-07-2006, 08:38
Servus,

ich habe eine PHP-Seite, auf der Tabellen dargestellt werden. Diese Tabellen enthalten in jeder Zeile zu Beginn eine Checkbox. Der Name der Box wird dynamisch vergeben (richtet sich nach Ergebnissen von SQL-Anfragen).
die Zeilen sehen also wie folgt aus:


<input type="checkbox" name="diff1.12" onClick="check('diff1.12')" value="1.12">dahinter mehere spalten...unwichtig
<input type="checkbox" name="diff1.11" onClick="check('diff1.11')" value="1.11">
<input type="checkbox" name="diff1.10" onClick="check('diff1.10')" value="1.10">
<input type="checkbox" name="diff1.09" onClick="check('diff1.09')" value="1.09">
<input type="checkbox" name="diff1.08" onClick="check('diff1.08')" value="1.08">
...


jetzt will ich mit Javascript prüfen:
- welche Box beim Submit gesetzt wurde.

Wie löse ich das am besten?
clumsy

undefined
12-07-2006, 13:54
var inputs = document.getElementsByTagName('input');
for ( var i = 0; i < inputs.length: i++ )
{
if ( inputs[i].type == 'checkbox' && inputs[i].selected == 'true' )
{
alert( inputs[i].value );
break;
}
}

Oder war es checked ? :)

clumsy
12-07-2006, 15:19
var inputs = document.getElementsByTagName('input');
for ( var i = 0; i < inputs.length: i++ )
{
if ( inputs[i].type == 'checkbox' && inputs[i].selected == 'true' )
{
alert( inputs[i].value );
break;
}
}

Oder war es checked ? :)

ja, ist checked ;)
sowas hab ich auch, aber das hilft mir nicht..ich muss mir merken, welche checkboxen selektiert sind, also speichere ich sie in ein array. wird eine checkbox wieder deaktiviert, so soll sie aus dem array geschmissen werden.

bisher hab ich das hier:


#### PHP ########
echo "<td nowrap><input multiple type=\"checkbox\" name=\"diff[]\" onClick=\"check2()\" value=\"".$result['Revision']."\"></td>";
#### END PHP ########


### JAVASCRIPT:###########
function check2() {

whole_array = document.getElementsByName("diff[]");
for (i=0; i<whole_array.length; i++)
{
checkbox = document.getElementsByName("diff[]")[i];
if ( checkbox.checked == true ) {
box.push(checkbox.value);
}
}
### END JAVASCRIPT:###########


Die Funktion check2 wird also bei jedem Anklicken einer Checkbox aufgerufen.
Wenn ich nun eine Checkbox wieder deselektieren will, wie bekomm ich das deselektierte Element aus dem array "box" raus?

Kann doch nicht so schwer sein?! Aber ich schnall´s trotzdem nicht.

Nochmal mein Ziel
Im Grunde habe ich viele Checkboxen auf einer PHP-Seite. Werden mehr als 2 angewählt, so kommt ein alert und die zuletzt gewählte Checkbox wird deselektiert. Wird das Formular mit weniger als 2 selektierten Checkboxen abgeschickt, so kommt ebenfalls ein alert.
Beim Submit wird eine neue PHP-Seite aufgerufen, auf der ich wissen muss, welche Checkboxen letztendlich angeklickt wurden.
Das Problem ist nicht, jede Anforderung einzeln zu lösen, sondern alle zusammen!

Eigentlich hab ich das bereits gelöst, aber auf eine ziemlich doofe Weise ..daher suche ich nach alternativen Lösungswegen...

Bin für jeden Tip dankbar!

undefined
12-07-2006, 15:34
Checked hat lese als auch Schreib zugriff ;)

clumsy
12-07-2006, 16:32
Checked hat lese als auch Schreib zugriff ;)

ich weiß ;) hilft aber nicht der Lösung meines Ziels ;)

nEox
12-07-2006, 21:04
Hallo clumsy,


Wenn ich nun eine Checkbox wieder deselektieren will, wie bekomm ich das deselektierte Element aus dem array "box" raus?
Bau doch dein Array "box" nach jedem Klick neu auf, dann hast du immer die aktuell selektierten Elemente drin.


Beim Submit wird eine neue PHP-Seite aufgerufen, auf der ich wissen muss, welche Checkboxen letztendlich angeklickt wurden.
Kannst du nicht über das "Value" entscheiden was geklickt wurde?

Wenn nicht, kannst du "onsubmit" z. B. deine Checkboxen durchlaufen und das "name"-Attribut durch eine Zahl ersetzen. Dann bekommst du in PHP z. B. 1, 2, 3 (oder diff[1], diff[2]... usw. je nachdem wie du es machst).

Grüße,
nEox

clumsy
21-07-2006, 15:52
danke! so hab ichs jetzt gemacht:


function check(revisionname) {
checkbox = document.getElementsByName(revisionname)[0];
if (checkbox.checked == true ) {
if ( box.length == 0 ) {
box.push(checkbox.value);
}
else if ( box.length > 0) {
firstelement = box.shift();
box.push(firstelement);
box.push(checkbox.value);
}
}
else if ( checkbox.checked == false) {
for (i=0; i < box.length; i++) {
if ( box[i] == checkbox.value ) {
box.splice(i,1);
}
}
// for (i=0; i < box.length; i++) {alert(box[i]);};
}

if (box.length > 2) {
alert('Please choose only 2 revisions');
checkbox.checked = false;
box.pop()
}
}