Checkbox setzen Problem

hugoea

Grünschnabel
Hallo

Mein Problem diesmal besteht darin, dass bei Checkboxen kein Wert für "unchecked" gesendet wird.

Also habe ich mir ein Hiddenfeld gebastelt, welches die Werte übergeben soll.

Code:
var td3 = document.createElement('td');
var inp3 = document.createElement('input');
	inp3.setAttribute('type','checkbox');
	inp3.setAttribute('id','hausma');
	inp3.setAttribute('name','hausm[]');
	td3.align = 'center';
var inp3h = document.createElement('input');
	inp3h.setAttribute('type','hidden');
	inp3h.setAttribute('id','hhausma');
	inp3h.setAttribute('name','hhausm[]');	
td3.appendChild(inp3);
td3.appendChild(inp3h);        
tr.appendChild(td3);

Das mache ich im JS mitels

Code:
var cbhm = document.getElementById('hausma').checked;
	if (cbhm == true)
	{
		document.getElementById('hhausma').setAttribute('value','1');
	}
	else
	{
		document.getElementById('hhausma').setAttribute('value','0');
	}

Sonst ist der Aufbau ist der gleiche wie hier: http://www.tutorials.de/forum/javascript-ajax/276748-tabbele-formular-array-probleme.html

Prüfen, ob es stimmt tue ich hiermit:

Code:
print_r($_POST['hhausm']);

Das eigentliche Problem ist hier wieder, dass der dynamisch erstellte Teil der Tabelle (mit JS) die Werte nicht übergibt, sowohl nicht wenn checked, als auch nicht, wenn unchecked.
Da die 1. Zeile ja im PHP/Smarty liegt, wird diese korrekt wiedergegeben.

Hier mal ein Bsp. für die Ausgabe:
1. Checkbox - unchecked
2. Checkbox - checked
3. Checkbox - checked
4. Checkbox - unchecked

Code:
Array ( [0] => 0 [1] => [2] => [3] => )

Danke schoneinmal für eure Mühen
 
Zuletzt bearbeitet:
Hi,

wenn ich Dich richtig verstehe, willst Du mehr als eine Zeile mit Checkboxen generieren. Dein Code lässt
darauf schliessen, aber es wird dort auch nur eine ID für mehr Elemente verwendet. Das widerspricht
jedoch der Forderung, dass eine ID in einem Dokument eindeutig sein muss. Das dürfte auch der Grund
sein, dass Dein Prüfalgorithmus nicht greift.

Besser ist es, die Checkboxen über ihren Namen zu prüfen. Allerdings hat der IE ein Problem damit,
dynamisch angelegten Elementen ein name-Attribut zuzuweisen. Um dieses zu umgehen, muss ihm das
komplette Element mit dem Name beim Erstellen übergeben werden.

Beim Prüfen erstellst Du eine Kollektion aus allen Checkboxen mit dem entsprechenden Name. Dieses
Feld durchläufst Du komponentenweise, prüfst die checked-Eigenschaft und setzt den Wert des zuge-
hörigen versteckten Feldes.

Mein Vorschlag:
Code:
<html>
<head>
<meta name="author" content="Quaese">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>www.tutorials.de</title>
<script type="text/javascript">
  <!--
function checkMich(){
  // Alle Checkboxen ermitteln
  var arrHidden = document.getElementsByName("hausm[]");

  // Alle Checkboxen durchlaufen
  for(var i=0; i<arrHidden.length; i++){
    document.getElementsByName("hhausm[]")[i].value = (arrHidden[i].checked)?1:0;
  }
}

function ZellenEinfuegen1(){
  var t=document.getElementById('prod_mehrf1').getElementsByTagName('tr');

  for (var x=0; x < t.length; x++){}

  var tr = document.getElementById('prod_mehrf1').insertRow(x-1);

  var td3 = document.createElement('td');
  td3.setAttribute("colspan", "2");

  var inp3 = (document.all && !window.opera)?document.createElement("<input name='hausm[]' />"):document.createElement('input');
  inp3.setAttribute('type','checkbox');
  inp3.setAttribute('name','hausm[]');
  td3.align = 'center';

  var inp3h = (document.all && !window.opera)?document.createElement("<input name='hhausm[]' />"):document.createElement('input');
  inp3h.setAttribute('type', 'hidden');
  inp3h.setAttribute('name','hhausm[]');

  td3.appendChild(inp3);
  td3.appendChild(inp3h);
  tr.appendChild(td3);
}
 //-->
</script>
</head>

<body>
<form action="get_formdata_test.php" name="formTest" method="post" onsubmit="checkMich();">
  <table id="prod_mehrf1">
    <tr>
      <td>
        <input type ="checkbox" id="hausma" name="hausm[]">
        <input type="hidden" name="hhausm[]">
      </td>
      <td>
        <input type="button" value="Neue Zeile" onclick="ZellenEinfuegen1();">
      </td>
    </tr>
    <tr>
      <td colspan="2"><input type="submit" value="Abschicken"></td>
    </tr>
  </table>
</form>
</body>
</html>
Vielleicht kannst Du etwas damit anfangen.

Ciao
Quaese
 

Neue Beiträge

Zurück