• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Form-Submit geht nur mit IE nicht mit FF oder Chrome

BPlagens

Neues Mitglied
Hallo!
Ich bin neu hier und muss gleich zu Anfang sagen das ich nicht der Held in HTML bin.
Ich habe ein Problem mit dem Senden einer Form.

So sieht mein Code aus:
HTML:
<form NAME="BoolAuf0">
        <input name="Bool" type="text" value="0" style="display:none;">
        <input type="button" value="Auf 0" onClick ="document.BoolAuf0.submit();document.BoolAuf0.reset();location.href='/Web/chart.html'">
</form>

Obige Code geht ohne Probleme in IE8 und IE9 unter FF5 und Chrome 13.0 geht er nicht.
Ich habe schon herausgefunden, dass Chrome und FF wohl Probleme mit "hidden" haben und habe den Tipp gelesen style="display.none;" zu verwenden.
Leider geht dies auch nicht.

Einen kleinen Erfolg hatte ich wenn ich beim "Sende-Button" den Type auf "submit" ändere. Dann wir aber der onClick-Teil nicht mehr ausgeführt.
Hat jemand einen Tipp für mich, wie ich es schaffe das obiges Formular auf IE, FF und Chrome funktioniert?

Vielen Dank
Bernd
 
Dein Code macht wenig Sinn. Das Formular hat kein Ziel es passiert also nichts, wenn du die submit Funktion aufrufst. Wenn es aber ein Ziel gäbe, dann macht der restliche Code keinen Sinn, da daach die Seite eigentlich weg ist.
 
Es handelt sich nicht um einen üblichen WEB-Server sondern ein Web-Server auf einem Bedienpanel dieser verhält sich evlt. anders.
Mein Code macht aber Sinn, da er ja mit IE geht und er geht auch wenn ich statt type="button" type="submit" verwende.

Was meinst du mit "...die Seite eigentlich weg ist."?
Ich lösche nach dem Submit nur die Eingabefelder um nach einem refresh nicht erneut die Werte zu übertragen.

Eigentlich war die Frage ja warum der Code nicht mit FF und Chrome geht.
Eine Google Suche nach "Submit not working FF Chrome" ergibt sehr viele treffer aber keine funktionierende Lösung.
Generell geht wohl weder bei FF noch bei Chrome "hidden" fields zu senden und via Javascript gibt es wohl auch Probleme.

Ich habe auch schon ein Script geschrieben das die Form sendet (über onClick) aber auch dies geht nicht mir FF und Chrome.
Chrome löst das onClick - Event nicht auf und FF führ .."form.submit()" nicht auf.
Auch dies ist lt. eine Google-Suche ein häufiges Problem.

Noch jemand einen Tipp?

Edit: habe gerade noch action="" mit eingefügt -> gleiches Ergebnis IE geht FF und Chrome nicht.
 
Ich kann dein Problem nicht nachvollziehen, bei mir funktioniert der Code den du uns gezeigt hast in allen Browsern, wenn ich ein Action einfüge. Es ist auch kein häufiges Problem, sondern nur eins wenn man etwas falsch macht, der Fehler läßt sich aber aus deinem (Beispiel?) Code nicht erkennen.
 
Hallo struppi - danke für die Hilfe.
Dann mal mein ganzer Code:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<HTML> 

<HEAD> 
<TITLE>Hier ist der Titel</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta name="description" content="Eine kleine Beschreibung">
<meta name="author" content="Schreiberling">
</HEAD>

<BODY> last update <MWSL><!-- write(GetVar("TimeStamp")); --></MWSL>
<BR><BR><BR>
<MWSL><!--
if(ExistVariable("Actual-Speed", "URL")) {SetVar("WEBContent.Fuellstand4", GetVar("Actual-Speed", "URL"));}if(ExistVariable("Bool", "URL")) {SetVar("WEBContent.AnAus", GetVar("Bool", "URL"));}
--></MWSL>

TestBit:  <MWSL><!-- write(GetVar("WEBContent.AnAus")); --></MWSL>

<BR>
Hier invertiert: <MWSL><!--if(GetVar("WEBContent.AnAus")=="true"){write("eins");} else {write("null");};--></MWSL>
<BR><BR>

<DIV style="background-color:red">
<table>    
  <td>    
  <form NAME="BoolAuf1" Id="Test0" action="" >           
    <input name="Bool" type="text"  value="1" style="display:none;">            
    <input type="button" value="Auf 1" onClick ="document.BoolAuf1.submit();document.BoolAuf1.reset();location.href='/Web/onoff.html'">
   </form>    
 </td>    
 <td>
    <form NAME="BoolAuf0" Id="Test1" action="">
      <input name="Bool" type="text" value="0" style="display:none;">
      <input type="button" value="Auf 0" onClick ="document.BoolAuf0.submit();document.BoolAuf0.reset();location.href='/Web/onoff.html'">                 </form>  
  </td>
 <td>
    <form NAME="BoolToggle" Id="TestT" action="">
        <input name="Bool" type="text" value="<MWSL> <!-- if(GetVar("WEBContent.AnAus")==true){write("a");write("b") ;}; --> </MWSL>">               <input type="button" value="Toggle" onClick ="document.BoolToggle.submit();document.BoolToggle.reset();location.href='/Web/onoff.html'">    </form>
    </td>
</table>
</DIV>

</BODY>
 
</HTML>

Die <MWSL> Tag sind eine Art PHP.
Fakt ist das keines der drei Forms sich mit FF oder Chrome senden lässt!
Und das mit den "hidden" Feldern ist bei immerhin 17.300.000 Treffern bei einer Google Suche wohl doch ein Problem - oder? - wird ja auch in der BUG-Liste aufgeführt.

Wie hast du eigentlich getestet das mein Code geht?
Die Adresszeile zeigt ja wegen dem "...reset()" und folgendem ".href" nichts an.
Aber beim weiteren Testen habe ich herausgefunden, dass FF und Chrome sich wohl nicht an die Reihenfolge halten. Nehme ich nämlich das .reset und .href raus geht es auch mit Chrome. (Hilft mir aber nicht) :-(

Also:
HTML:
<form NAME="BoolAuf1" Id="Test0" action="" > 
   <input name="Bool" type="text"  value="1" style="display:none;"> 
   <input type="button" value="Auf 1" onClick ="document.BoolAuf1.submit();" > 
</form>
geht!

Aber:
HTML:
<form NAME="BoolAuf0" Id="Test1" action="">  
      <input name="Bool" type="text" value="0" style="display:none;"> 
     <input type="button" value="Auf 0" onClick ="document.BoolAuf0.submit();document.BoolAuf0.reset();location.href='/Web/onoff.html'"> 
 </form>
geht nicht!?

Es sieht so aus als würde Chrome und FF erst reseten und dann submit ausführen.

Hast du da eine Idee?

Vielen Dank!
 
Naja, ich frage mic h wie du kontrollieren willst das etwas passiert oder nicht.

Fakt ist dass das Formular sich absenden läßt, das kann man auch sehen wenn du auf das weiterleiten per loaction.href verzichtest. Das reset ist dabei unrelevant und auch überflüssig, da das Formular sich ja nicht geändert hat.
 
Da FF und Chrome sich völlig anders verhalten als IE habe ich es jetzt so gelöst:

im body steht jetzt:
HTML:
<body onUnload="clearForms()">

und das Script:
HTML:
<script>
function clearForms()
{  
var i;  for (i = 0; (i < document.forms.length); i++) {    
     document.forms[i].reset();
     location.href='/Web/onoff.html'
  }
}
</script>

und die Form:
HTML:
<form NAME="BoolAuf1" Id="Test0" action="" >   
 <input name="Bool" type="text"  value="1" style="display:none;">   
 <input type="button" value="Auf 1" onClick ="document.BoolAuf1.submit();" >
</form>

Jetzt werden die Werte in der Form richtig übertragen. Dann kommt das Ereignis <body onUnload..> welches im Script alle Forms resetet und ein neu laden der Seite anfordert.

Diese Lösung geht jetzt mit IE8, IE9 , FF und Chrome

Evlt. hat ja jemand eine bessere Lösung?

Vielen Dank
Bernd
 
Lese gerade deine Frage:Issue 45549 - chromium - Pressing ENTER/RETURN doesn't submit a form when submit button is styled with "display: none;" - An open-source browser project to help move the web forward. - Google Project Hosting
Ist eins der Probleme.
Es ist aber auch so, das FF und Chrome teilweise nur submit ausführen wenn sich Daten geändert haben. Also ein submit nur geht wenn man ein Feld ändert. Chrome führt teilweise auch nur submits aus die im ersten Tab angezeigt werden (in akt Version behoben).
Aber wie ich schon sagte einfach mal googlen Stichwort "hidden" "chrome" "<input" oder hier: post form not submitting values? - Google Chrome Help man soll statt "hidden" style="display:none;" verwenden.

Manche Probleme kommen wohl bei einem vor und bei anderen garnicht :-) Hattest wohl immer Glück - oder es immer richtig gemacht!
Jedenfalls bin ich mit meinem Problem nicht alleine.

Wie kommst du auf die Idee ich könnte nicht prüfen ob was passiert ist?
Die Daten werden natürlich ausgewertet - aber eben vom Siemens MiniWEB-Server.

Danke
 
OK, das erste ist ein Bug im Chrome, der war mir neu.

Aber ich sehe nicht dass der etwas mit deinem Problem zu tun hat. Genauso wie ich nach wie vor nicht verstehe, was der reset() soll oder warum du keine hidden Formularelemente verwendest?

Ich frag mich auch warum du drei Formulare verwendest. Die ganze Logik könnte man auch mit einem Formular umsetzen.
 
Ja wie? Das ist doch der BUG!
Chrome führt kein submit bei hidden input fields aus - daher kann ich die nicht nehmen!

Wie soll dann der Trick gehen in einem Formular einmal Bool=0 bzw Bool=1 bzw Bool=NOT Bool zu senden?

Das "reset" brauche ich im fertigen Projekt da ich noch ein input-field habe in dem der User etwas eintragen kann.
Wenn er jetzt submit drückt wird der Wert übertragen - soweit ok
Jetzt ändert sich der Wert auf dem Sever
Führt der User jetzt ein reload aus wird erneut der Wert übertragen - das darf nicht sein!

Es geht hier um eine Steuerung
Annahme: Wir starten eine Pumpe die einen Behälter füllt auf der Weboberfläche gibt es START STOP und den Füllstand.
Der User drückt start - Pumpe läuft los
Um zu sehen wie voll der Behälter ist braucht er ein reload
Jetzt stellt die Steuerung fest, dass der Behälter zu voll ist und stoppt.
User macht neuen reload Pumpe läuft erneut los - obwohl Behälter voll!

Es ist einfach wichtig, dass die Felder "leer" sind bei einem reload - und diese ist nötig um aktuellen Status zu erhalten.

Übrigens habe ich mich getäuscht - neuer Chrome BUG: location.href und andere Variation gehen nicht. Auch hierzu gibt es viele Google - Treffer.
Bindet man das location.href an ein onClick geht es - aber nicht unter Chrome.

Danke

 
Ja wie? Das ist doch der BUG!
Chrome führt kein submit bei hidden input fields aus - daher kann ich die nicht nehmen!
Du verwechelst da was, ich spreche von Elementen mit type="hidden"


Wie soll dann der Trick gehen in einem Formular einmal Bool=0 bzw Bool=1 bzw Bool=NOT Bool zu senden?
Dann habe ich das falsch verstanden, aber wieso musst du denn einen Wert drei mal mit verschiedenen Werten verschicken?
 
Ich spreche auf von Elementen mit type="hidden" - wenn man etwas googelt findent man etliche Infos, dass Chrome den Wert eines hidden input fields nicht übermittelt daher ja der Workaround mit style="display:none;"

Zu den drei Werten (der dritte ist nur test) ist wie ein Lichtschalter
1. Wert =1 = EINschalten
2. Wert =0 = AUSschalten
3. Wert = NOT WERT = EIN-> AUS bzw. AUS-> EIN
Und ich versende ja nur einen Wert (könnte man ja auch mit einem RadioButton lösen)

Am Besten kann man sich das glaube ich vorstellen mit einer Anwendung für Home-Automation.
Mann möchte über Internet prüfen ob im Keller das Licht an ist.
Wenn ja kann man es ausschalten.

Jetzt kommt die Frau nach Hause und geht in den Keller - macht also Licht wieder an.
Da im Browser immer noch Licht=0 steht wird mit jedem reload das Licht wieder aus gemacht. (Die Frau wird sich bedanken!) :-)

Witzig wird es wenn man zwei Browser öffnet und der eine Licht=0 und der andere Licht=1 nach jedem reload sendet. Das gibt einen schönen Blinker.

Aber lange Rede kurzer Sinn - Es geht mit IE und FF dass soll mal reichen.

Vielen Dank

Edit: location.href wie ich es verwende geht mit IE,FF und Opera - nur Chrome und Safari nicht.

Scheinbar laden Chrome und Safari immer vom Cache (window.location.reload(true) geht auch nicht bei Chrome)
 
Zuletzt bearbeitet:
Ich spreche auf von Elementen mit type="hidden" - wenn man etwas googelt findent man etliche Infos, dass Chrome den Wert eines hidden input fields nicht übermittelt daher ja der Workaround mit style="display:none;"
Wenn das wirklich so wäre, würde keiner Chrome benutzen, denn fast alle Formulare im Netz benutzen diese Variante um Zusatzinformationen zu senden. Ich kann auch keine Seite finden, wo das gesagt wird. Das display:none nicht gesendet wird, dagegen kommt häufiger vor.

Zu den drei Werten (der dritte ist nur test) ist wie ein Lichtschalter
1. Wert =1 = EINschalten
2. Wert =0 = AUSschalten
3. Wert = NOT WERT = EIN-> AUS bzw. AUS-> EIN
Und ich versende ja nur einen Wert (könnte man ja auch mit einem RadioButton lösen)
Dann sind deine drei Formulare überflüssig und du brauchst nur eins und drei Buttons, die das versteckte Feld ändern. Auch die Schaltlogik läßt sich problemlos so lösen, wobei du die Nebenläufigkeit natürlich nur dort lösen kannst, wo du die Informationen hast über den Schaltzustand: auf dem Server.

Auch dein Zusatzproblem läßt sich Serverseitig viel besser lösen, in dem du mit Hilfe eines entsprechenden http header eine Weiterleitung sendest. Das funktioniert immer.

[EDIT] Ok, nach langem suchen: Issue 95961 - chromium - post form sometimes fails to submit values - An open-source browser project to help move the web forward. - Google Project Hosting Offensichtlich gab es mal eine Version die hin und wieder unter bestimmten Umständen Probleme hatte. Diese ist aber hoffnungslos veraltet. Aktuell ist irgendwas mit 13.xx und der Bug trat in der 5'er Version auf.
 
Zuletzt bearbeitet von einem Moderator:
Nochmal zum hidden: post form not submitting values? - Google Chrome Help da steht doch deutlich das der Value von hidden Elementen nicht übertragen werden. Daher die Empfehlung mit style="display:none;" zu arbeiten.

Serverseitig geht da leider nix - es ist ein embedded - WebServer der nur MWSL kann und sich in keinster Weise konfigurieren läßt.
Schade ist nur das der gute Chrome sich völlig anders verhält als FF, IE und Opera.

Mit den Buttons den Value des versteckten Feldes zu ändern und dann zu senden ist wirklich eine Möglichkeit an die ich noch nicht gedacht habe.
Aber wo liegt der Vorteil? Kann Chrome kein 3 Forms? :-)
Wirklich viel kürzer wird der Code dadurch ja auch nicht.
Und da Problem hat ja nix mit der Anzahl der Forms zu tun - es ist ja ein generelles Problem.

Danke
 
Da steht deutlich, dass es sich um eine Version 2.xx handelt, wie gesagt aktuell ist 13 oder 14, benutzt du noch Windows 3.11?


EDIT: Und nochmal, das ist eine rudimentäre Funktion, wenn das wirklich so wäre, würde keiner Chrom benutzen, da fast alle Formulare versteckte Felder benutzen.
 
Serverseitig geht da leider nix - es ist ein embedded - WebServer der nur MWSL kann und sich in keinster Weise konfigurieren läßt.
ja aber Werte abfragen, oder?
Sonst würde diese Sprache ja keinen Sinn machen. Es ging ja um die Problematik, dass im Browser ein anderer Wert steht, als die Schaltung in Wirklichkeit hat und das weiß in deinem Fall nur der Server.
 
Also ich habe Chrome 13.0.782.112 und wenn in meiner Form:

HTML:
<input name="Bool" type="text" value="0" style="display:none;">

steht geht es!

Steht da aber:

HTML:
<input name="Bool" type="text" value="0" type="hidden" >

geht es nicht! Und genau so ist es auch im Link beschrieben.
Es war ein BUG und soll behoben sein - bei mir ist wohl offensichtlich immer noch etwas faul.

ja aber Werte abfragen, oder?
Sonst würde diese Sprache ja keinen Sinn machen. Es ging ja um die Problematik, dass im Browser ein anderer Wert steht, als die Schaltung in Wirklichkeit hat und das weiß in deinem Fall nur der Server.

Wir drehen uns im Kreis! Chrome vordert die Seite ja nicht mehr an! Der Server wird also garnicht erst gefragt!
Wie ich sagte geht "location.href" mit Chrome nicht!

Ich hatte hier eigentlich um Hilfe gebeten und nicht eine grundsätzliche Diskussion über geht/geht nicht bei Chrome anfangen wollen.

Ich wollte nur einen Tipp wie (Auszug) dies auch mit Chrome funktioniert:
HTML:
function clearForms()
{
  var i;
  for (i = 0; (i < document.forms.length); i++) {
    document.forms[i].reset();
    location.href='/Web/onoff.html';
  }
 
.....
 
<body onUnload="clearForms()">

.....

<form NAME="BoolAuf1" Id="Test0" action="" >
<input name="Bool" type="text"  value="1" style="display:none;">
<input type="button" value="Auf 1" onClick ="document.BoolAuf1.submit();" >
</form>

Obiger Code geht wie gesagt auf IE8+IE9,FF5 und Opera11.51 nur Chrome + Safari mag nicht.
Daher die einfache Frage was ist zu ändern, dass Chrome sich so verhält wie die anderen?

Und es ist nicht hilfreich, mir zu sagen dass es gehen muss da sonst ja keiner den Chrome verwenden würde - ich benutze ihn gerade und kann offesichtlich hier etwas einstellen.

Es ist ja auch egal ob ich jetzt via hidden oder style das Element unsichtbar bekomme weg is weg.
Fakt ist das nur bei Chrome nach einem Submit in der Adresszeile "...onoff.html?Bool=1" steht bei den anderen aber "..onoff.html" so wie man es nach einem " location.href='/Web/onoff.html';" auch erwartet.

Jemand evlt. noch einen konstruktiven Vorschlag?

Vielen Dank
 
Ich habe hier ebenfalls Chrome 13.0 und es funktioniert, du machst etwas falsch, wir Wissen aber nicht was.

Das folgende Beispiel funktioniert:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<HTML> 

<HEAD> 
<TITLE>Hier ist der Titel</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta name="description" content="Eine kleine Beschreibung">
<meta name="author" content="Schreiberling">

<script type="text/javascript">

var param = window.location.search;
var bool = '';
if(param) {
	var idx = param.indexOf('=');
	bool = param.substr(idx + 1);
}

</script>
</HEAD>

<BODY>

<form action="" method="get">
<script type="text/javascript">document.write('<input name="Bool" type="hidden" value="' + bool + '">');</script>

<input type="submit" value="Auf 1" onClick ="this.form.Bool.value=1">
<input type="submit" value="Auf 0" onClick ="this.form.Bool.value=0">
<input type="submit" value="Toggle" onClick ="this.form.Bool.value=this.form.Bool.value == 0 ? 1 : 0">

<br>Bool: 
<script type="text/javascript">document.write('<input type="text" value="' + bool + '">');</script>

</form>

</BODY>
 
</HTML>
 
Danke für den Source - aber so weit war ich ja schon!
Auch ich habe es geschaft das ein Submit mit allen Browsern geht (wenn auch anders als du).

Das Problem jetzt ist doch das im Adressfeld immer "..?Bool=" stehen bleibt.
Was ich bei deinem Beispiel nicht finden kann ist location.href oder .reload(true) um quasi das Adressfeld zu "bereinigen".
Bei deinem Beispiel ist das Reload-Problem nicht gelöst.

Vielen Dank!
 
Zurück
Oben