• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[JS] Opera und IE Problem

Gut, habe das nächste Problem. Wenn ich jetzt das formular abschicke und mit PHP auf die Felder zugreifen will, versuche ich das per $_POST['tracknr'][$i]. Durch das [] am ende des Namen des Formularfeldes sollte ja PHP die werte ja eigentlich in ein Array lesen. Funktioniert auch bei allen Feldern dich ich per php erzeugen lasse. Wenn ich jetzt aber zusätzliche Felder mit JS anlege, werden diese von PHP ignoriert. Jemand eine idee wie ich das lösen könnte?

hier noch mal die entsprechenden codeteile:
PHP:
for ($i = 0; $i < count($TrackData); $i++)
{
	$retval[] = "\t\t<tr>";
	$retval[] = "\t\t\t".'<td><input type="text" name="tracknr[]" size="2" maxlength="2" value="'.$TrackData[$i]['nr'].'" /><input type="hidden" name="trackid[]" value="'.$TrackData[$i]['id'].'" /></td>';
	$retval[] = "\t\t\t".'<td><input type="text" name="tracktitel[]" value="'.$TrackData[$i]['titel'].'" size="25" maxlength="200" /></td>';
	$retval[] = "\t\t\t".'<td><input type="text" name="trackmin[]" value="'.$TrackData[$i]['min'].'" size="2" maxlength="2" />:<input type="text" name="tracksek[]" value="'.$TrackData[$i]['sek'].'" size="2" maxlength="2" /></td>';
	$retval[] = "\t\t\t".'<td><input type="text" name="trackfile[]" value="'.$TrackData[$i]['url'].'" size="25" maxlength="200" readonly="readonly" /><input type="hidden" name="trackfilechanged[]" value="'.$fileChanged[$i].'"/></td>';
	$retval[] = "\t\t\t".'<td><input type="button" value="mp3 wählen" onclick="chooseMp3('.$i.')" /><input type="button" value="alte mp3" onclick="RestoreMp3(\''.$TrackData[$i]['url'].'\', '.$i.')" /></td>';
	$retval[] = "\t\t</tr>";
}

HTML:
<script>
function createTrackEntry()
{
	count = document.getElementsByName('trackid[]').length;
	
	var newTr = document.createElement( "TR" );

	var newTd = document.createElement( "TD" );
	newTd.innerHTML = '<input type="text" name="tracknr[]" value="'+(count+1)+'" size="2" maxlength="2" /><input type="hidden" name="trackid[]" value="0" />';
	newTr.appendChild( newTd );
		
	var newTd = document.createElement( "TD" );
	newTd.innerHTML = '<input type="text" name="tracktitel[]" size="25" maxlength="200" />';
	newTr.appendChild( newTd );
		
	var newTd = document.createElement( "TD" );
	newTd.innerHTML = '<input type="text" name="trackmin[]" size="2" maxlength="2" />:<input type="text" name="tracksek[]" size="2" maxlength="2" />';
	newTr.appendChild( newTd );
		
	var newTd = document.createElement( "TD" );
	newTd.innerHTML = '<input type="text" name="trackfile[]" size="25" maxlength="200" readonly="readonly" /><input type="hidden" name="trackfilechanged[]" value="0" />';
	newTr.appendChild( newTd );
		
	var newTd = document.createElement( "TD" );
	newTd.innerHTML = '<input type="button" value="mp3 wählen" onclick="chooseMp3('+count+')" /><input type="button" value="alte mp3" onclick="RestoreMp3(\'\', '+count+')" />';
	newTr.appendChild( newTd );
		
	var oTableBody = document.getElementById( "tracklist" );
	if ( oTableBody.firstChild && oTableBody.firstChild.tagName == "TBODY" )
	{
		oTableBody = oTableBody.firstChild;
	}		
	oTableBody.appendChild( newTr ); 
}	
</script>
Alle Felder die mit PHP erzeugt wurden sind wenn ich das Fomular abschicke und mir die Inhalte anzeigen lasse wieder da, alle Felder die mit JS erzeugt wurden werden einfach verschluckt, PHP findet die nicht im entsprechendem $_POST (hab die zählen lassen).

WEiß wer warum und was ich dagegen machen kann?
 
ich hab jetzt mal alle namen der felder durchnummeriert, also trackid1, tracknr1,... trackid2, tracknr2...
Irgendwie werden die Namen der input-Felder nicht gesetzt, denn wenn ich mit php auf die mit JS erzeugten Felder zugreifen will, wird das hier ausgeben:
" Undefined index: trackid2 in ..."

Ich hab den Eindruck das die mit JS erzeugten Felder garnicht abgeschickt werden. Zumindest wurden die mit keiner meiner beiden Lösungen erkannt. Hat wer ne idee woran das liegen kann?
 
Blöde Frage, ich weiß, aber hast Du die Tabelle "ordnungsgemäß" durch das FORM-Element umschlossen bzw. hast Du 'mal den erzeugten HTML-Code "validiert"?
 
Sorry, jetzt bin ich auch etwas sprachlos, werd' das ganze 'mal nachbauen und schauen was passiert.
 
Sorry, hab' das ganze vielleicht ein bißchen schleifen gelassen, hab' leider nur spät abends richtig Zeit, wenn meine kleine Tochter eingeschlafen ist. Apache und PHP hab' ich aber schon zwischendurch installiert und läuft auch. Vielleicht komm' ich heute abend dazu, da läuft der "Bulle" ;-)

Ich melde mich!

tschau

Frank
 
Meim Testfall funktioniert: Ich kann auf die neu erzeugten FORM-Elemente zugreifen:

Hier sind die Testfiles:

Scenario:
(1) Ich füge drei Zeilen ein
(2) Ich gebe in jedes Input-Element eine Zahl ein.
(3) Ich schicke das Formular ab
-->Ergebnis: Die Summen der jeweiligen Zeilen werden ausgegeben.

Alles so wie erwartet

PHP:
<html>
<head>
<title>Malleus' TableInsertRowTest</title>
<script type="text/javascript">

var count=0;

function newRow()
{
var newTr = document.createElement( "TR" );

var newTd = document.createElement( "TD" );
newTd.innerHTML = "Text" + ( ++count );
newTr.appendChild( newTd );

var newTd = document.createElement( "TD" );
//newTd.innerHTML = '<input type="button" value="mp3 wählen" onclick="chooseMp3('+count+')" /><input type="button" value="alte mp3" onclick="RestoreMp3(\'\', '+count+')" />';
newTd.innerHTML = '<input type="text" name="a'+count+'"/>+<input type="text" name="b'+count+'"/>';
newTr.appendChild( newTd );

var oTableBody = document.getElementById( "myTable" );
if ( oTableBody.firstChild && oTableBody.firstChild.tagName == "TBODY" ) 
	oTableBody = oTableBody.firstChild;

oTableBody.appendChild( newTr ); 
alert(oTableBody.outerHTML);
}

</script>

</head>
<body>
<form action="test.php" method="post">
<table id="myTable" border="1">
</table>
<input type="submit"/>
</form>
<input type="button" id="myButton" value="neue Zeile einfügen" onclick="newRow()">

</body>

und hier meine PHP-Datei "test.php"
PHP:
<html>
<body>
<?php

   $erg1 = $HTTP_POST_VARS[a1] +  $HTTP_POST_VARS[b1];
   $erg2 = $HTTP_POST_VARS[a2] +  $HTTP_POST_VARS[b2];
   $erg3 = $HTTP_POST_VARS[a3] +  $HTTP_POST_VARS[b3];
   echo "$erg1 + $erg2 + $erg3";
?>
</body>
</html>


Jetzt bist Du wieder dran ;-)

Tschau

Frank
 
funktioniert bei mir nicht.
Kann ich mir nicht erklären. Habs jetzt so gelöst das ich die nach und nach sichtbar machen kann. Funktioniert auch ist aber nicht so elegant.
 
das geht. Komisch. Obs daran lag dass ich das Formular immer an sich selbst schicke? oder dass es offline getestet wurde? Hab an deinem Script eigentlich nichts verändert.

Danke für deine Mühe!
 
Wenn Du willst, könnte ich Deine Testdateien bei mir 'mal uploaden. Dann kannst Du sehen, ob irgendwelche WebServer einstellen anders sind
 
danke, ich werde das mal bei mir auf dem server ausprobieren, wenns da nicht läuft, kann ich damit auch nix anfangen. Würde mich aber wundern, weil sonst stell ich immer fest dass es lokal auch dann tut wenns auf dem server nicht tut.
 
Ich habe ein ähnliches Problem. Bei mir funktioniert ein Button, der nicht dynamisch eingebunden wird in FF und IE. Jedoch funktioniert ein Button, der dynamisch mittels Javascript in eine Zeile einer Tabelle auf der Seite eingefügt wird im FF, aber nicht im IE. Dabei sind die generierten Attribute gleich. Die Aufgerufene Methode ist die gleiche, daher liegt es schon mal nicht an der aufgerufenen Methode. Es ist so, dass sich garnichts tut, wenn ich auf den dynamish generierten Button drücke. "Onclick scheint dort einfach nicht zu funktionieren."

Ich weiss nicht, ob es hilft, aber bei mir funktioniert der normale Button mit Attribut

onclick="doMethod(xyz);"

Evtl. tuts schon das Semikolon.

gruß
Ovaron
 
Moin!
Ovaron schrieb:
Jedoch funktioniert ein Button, der dynamisch mittels Javascript in eine Zeile einer Tabelle auf der Seite eingefügt wird im FF, aber nicht im IE.
Wie weist Du denn den event-Handler bei der dynamischen Variante zu?

Ahoi - Pit
 
öhm - eventhandler?

Ich denke "onclick" setzten genügt. Und damit ist der Eventhandler zugewiesen.
Muss ich den speziell zuweisen?

Mein Code für das entscheidenden Zeilenelement sieht so aus:

var td7 = document.createElement('TD');
var c = document.createElement('INPUT')

c.type = "button";
c.id = "addButton2";
c.value = "add";

var onclick = document.createAttribute("onclick");
onclick.nodeValue="buddygui.addUser();";
c.setAttributeNode(onclick);
td7.appendChild (c);
 
Anstatt dieser 3 Zeilen:
var onclick = document.createAttribute("onclick");
onclick.nodeValue="buddygui.addUser();";
c.setAttributeNode(onclick);

nimmste einfach diese:
c.onclick=function(){buddygui.addUser();};

Ahoi - Pit
 
Zurück
Oben