Paul: Formular auf aktuell erzeugtes Iframe leiten und validator

Beitrag lesen

Hallo,

ich erzeuge die Ausgabe eines Formulars in einem Iframe.

Nun habe ich eine Version die zwar funktioniert, hierbei verwende ich display none/block. Eigentlich hatte ich mir das aber anders gedacht, das Element sollte zur Laufzeit generiert werden und danach auch wieder entfernt werden. Nur bei dieser Variante spielt mein Formular nicht mehr mit, es sendet anscheinend nichts.

Bevor ich nun die beiden Quelltexte zeige noch ein Wort zum Validator:

Als erste Fehlermeldung, da hatte ich den html tag noch so: <html>, sagt er mir ich solle doch folgendes verwenden:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Ok, dann mache ich das und bekomme dann als Fehlermeldung dazu:

Line 2, Column 62: there is no attribute "lang".

Was denn nun, versteh ich nicht.

Danach kommen noch 11 weitere Fehler, die ich ebensowenig verstehe.
Aber hat wohl damit zu tun das es Javascript ist.

Na gut wie dem auch sei hier nun die Quelltexte:

######## 1. So funktioniert es leider nicht #####################

  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml"  lang="en">  
<head>  
<title>xxx</title>  
<style type="text/css">  
  
*{font-family:arial;}  
html{overflow-x:hidden;overflow-y:auto;}  
  
body,html{margin:0;padding:0;height:100%;width:100%;}  
  
body{  
background-color:#ffffff;  
color:#676767;  
font-size:13px;  
}  
/* ############# IFR ############### */  
  
#ifrid{  
width:84%;height:90%;  
position:absolute;top:4%;left:7%;  
margin:auto;  
padding:0px;  
filter:alpha(opacity=90);  
-moz-opacity: 0.9;  
opacity: 0.9;  
background-color:#69821E;  
text-align:center;  
}  
  
  
#ifrid p{  
padding:3px;  
margin:0;  
}  
#ifrid input{  
font-size:11px;  
color:#000000;  
font-family:arial;  
padding:3px;  
margin:0px auto;  
}  
#ifrid iframe{  
margin:auto;  
height:80%;  
width:99%;  
overflow:auto;  
}  
/* ##### END IFR ###### */  
  
</style>  
  
<script type="text/javascript">  
// #################################################  
function ifr_control()  
{  
var tag_id    = 'ifrid';                              // WICHTIG, die id des umgebenden Elementes  
var starttag  = '<div id="'+tag_id+'">';              // Start des umgebenden Tags: div,p,span alles geht  
var endtag    = '</div>';                             // Ende des umgebenden Tags  
var buttontxt = 'close';                              // Text des Schliessen-Buttons  
var ifr_src   = 'http://de.search.yahoo.com/';        // Standard URL des iframes  
var ifr_name  = 'ifrname';                            // WICHTIG muss auch target Name im Formular  
var ifr_extra = ' scrolling="auto" frameborder="0"';   // Alles was sonst noch an Attribute sein soll  
  
  
// #### Falls der Layer schon offen ist, wird er nun entfernt aus dem HTML ####  
if(document.getElementById(tag_id) )  
{  
  var knoten  = document.getElementById(tag_id);  
  knoten.parentNode.removeChild(knoten);  
  
  //alert(document.getElementsByTagName('body')[0].innerHTML); // nur zum testen  
  return true;  
}  
  
// #### Falls der Layer nicht offen/vorhanden ist, wird er nun erzeugt ####  
  
// *JS braucht bei langen Strings, im Gegenssatz zu php, einen Backslash wegen mehrzeilenstring.  
var neues = starttag+'<p><input onclick="ifr_control();" type="button" value="'+buttontxt+'" /></p>\  
<iframe src="'+ifr_src+'" name="'+ifr_name+'"'+ifr_extra+'></iframe>'+endtag;  
  
var obj_1 = document.getElementsByTagName('body')[0];  
obj_1.innerHTML = neues+obj_1.innerHTML;  
  
return true;  
} // ###########  end of js func. #############  
</script>  
  
  
</head>  
<body>  
  
<div style="margin:200px auto;text-align:center;">  
<form action="http://www.google.com/search" onsubmit="ifr_control();" target="ifrname">  
<input type="text" name="q" value="selfhtml" />  
<input type="submit" value="irgendwas senden" />  
</form>  
</div>  
</body>  
</html>  

uns so funktioniert es zwar, aber.....
  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">  
<head>  
<title>xxx</title>  
<style type="text/css">  
  
*{font-family:arial;}  
html{overflow-x:hidden;overflow-y:auto;}  
  
body,html{margin:0;padding:0;height:100%;width:100%;}  
  
body{  
background-color:#ffffff;  
color:#676767;  
font-size:13px;  
}  
/* ############# IFR ############### */  
  
#ifrid{  
display:none;  
width:84%;height:90%;  
position:absolute;top:4%;left:7%;  
margin:auto;  
padding:0px;  
filter:alpha(opacity=90);  
-moz-opacity: 0.9;  
opacity: 0.9;  
background-color:#69821E;  
text-align:center;  
}  
  
  
#ifrid p{  
padding:3px;  
margin:0;  
}  
#ifrid input{  
font-size:11px;  
color:#000000;  
font-family:arial;  
padding:3px;  
margin:0px auto;  
}  
#ifrid iframe{  
margin:auto;  
height:80%;  
width:99%;  
overflow:auto;  
}  
/* ##### END IFR ###### */  
  
</style>  
  
<script type="text/javascript">  
// #################################################  
function ifr_control()  
{  
var tag_id    = 'ifrid';                              // WICHTIG, die id des umgebenden Elementes  
var starttag  = '<div id="'+tag_id+'">';              // Start des umgebenden Tags: div,p,span alles geht  
var endtag    = '</div>';                             // Ende des umgebenden Tags  
var buttontxt = 'close';                              // Text des Schliessen-Buttons  
var ifr_id    = 'xid';                                // Id des Iframes  
var ifr_src   = 'http://de.search.yahoo.com/';                  // Standard URL des iframes  
var ifr_name  = 'ifrname';                            // WICHTIG muss auch target Name im Formular  
var ifr_extra = ' scrolling="auto" frameborder="0"';   // Alles was sonst noch an Attribute sein soll  
  
  
// #### Falls der Layer schon offen ist, wird er nun entfernt aus dem HTML ####  
if(document.getElementById(ifr_id) )  
{  
  document.getElementById(tag_id).innerHTML='';  
  document.getElementById(tag_id).style.display='none';  
  //alert(document.getElementsByTagName('body')[0].innerHTML); // nur zum testen  
  return true;  
}  
  
// #### Falls der Layer nicht offen/vorhanden ist, wird er nun erzeugt ####  
  
// *JS braucht bei langen Strings, im Gegenssatz zu php, einen Backslash wegen mehrzeilenstring.  
var neues = '<p><input onclick="ifr_control();" type="button" value="'+buttontxt+'" /></p>\  
<iframe id="'+ifr_id+'" src="'+ifr_src+'" name="'+ifr_name+'"'+ifr_extra+'></iframe>';  
  
document.getElementById(tag_id).style.display='block';  
document.getElementById(tag_id).innerHTML=neues;  
return true;  
} // ###########  end of js func. #############  
</script>  
  
  
</head>  
<body>  
  
  
<div id="ifrid"></div>  
<div style="margin:200px auto;text-align:center;">  
<form action="http://www.google.com/search" onsubmit="ifr_control();" target="ifrname">  
<input type="text" name="q" value="selfhtml" />  
<input type="submit" value="irgendwas senden" />  
</form>  
</div>  
</body>  
</html>  
  

woran liegts?
Paul