Chrome en submit hidden field

Status
Niet open voor verdere reacties.

SamWitse

Gebruiker
Lid geworden
20 nov 2008
Berichten
28
Ik stel na veel *$@# vast dat een hidden field in Chrome niet doorgegeven wordt bij een submit.
Ik ben er nog niet aan toe om een aparte pagina te maken om het geheel te strippen, en tot de kern van het probleem te herleiden, maar in wezen ziet het er als volgt uit:

$TopSecret = $_POST["TopSecret"] ;
echo "TopSecret = $TopSecret" ;
<form method="post" action=...roep jezelf op >
...invoervelden..
<input type="hidden" name="TopSecret" value="urbanus">
...submit-button

Bij het submitten laat hij in Chrome niks zien, en in IE wél de naam van de misterieuze persoon.:(
Is dit een gekend probleem, of dien ik verder het probleem te onderzoeken/debuggen?

Dankuzeerwel op voorhand,
Sam
 
De fout!

Na een hele namiddag debuggen kom ik op het volgende:

Mijn eigen button werkt met een onMouseDown="submit()".
Deze werkt in IE zoals het hoort, maar in Chrome wordt de submit wel uitgevoerd, maar worden de velden niet gepost.
Hier het voorbeeld:

Code:
<body onLoad="MM_preloadImages('Buttons/AdminOver.gif')">
<?PHP 
$TopSecret = $_POST["TopSecret"] ;
echo "TopSecret = $TopSecret<br>" ;
?>
<form action="test.php" method="post">
<input name="TopSecret" type="hidden" value="Urbanus">
  <a href onMouseDown="submit()" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image1','','Buttons/OKOver.gif',1)"><img src="Buttons/OK.gif" name="Image1" width="100" height="28" border="0"></a> 
  <input name="OK" type="submit">
</form>
</body>

Klikken op de tweede OK-button (<input type submit>) geeft het scherm terug met de geheime boodschap; klikken op de eerste OK-button (< a href..>) geeft het scherm terug ZONDER de geheime boodschap.

Ik vermoed dat de <a-tag fout is samengesteld, alleen zie ik niet waar.
Nogmaals, in IE werkt het, in Chrome niet.

Elke tip is meer dan welkom!

Sam.
 
Die link klopt inderdaad niet, probeer dit eens
HTML:
<a href="" onclick="submit()" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image1','','Buttons/OKOver.gif',1)"><img src="Buttons/OK.gif" name="Image1" width="100" height="28" border="0"></a>

De href bevatte geen ="", daarnaast werkt onclick waarschijnlijk beter dan onmousedown.

Maar je kunt ook gewoon een knop gebruiken in plaats van een link. Lijkt mij iets netter voor een formulier.
Een afbeelding kun je ook als formulier-knop laten werken.
 
Goed en slecht nieuws.
Het slechte: je verbetering om href ="" te schrijven, geeft nog steeds geen resutaat in Chrome. Ook het gebruik van onClick verandert daar niets aan.
Nu het goede: na wat (lees: heel veel) probeerwerk, heb ik de volgende tags die wél werken in Chrome:
Code:
 <a href="javascript:document.forms[0].submit()" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image1','','Buttons/AdminOver.gif',1)"><img src="Buttons/Admin.gif" name="Image1" width="100" height="28" border="0"></a>
en
Code:
 <img onClick="javascript:document.forms[0].submit()" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image1','','Buttons/AdminOver.gif',1)" src="Buttons/Admin.gif" name="Image1" width="100" height="28" border="0">

Merk op dat je verplicht bent om document.forms[0]. toe te voegen, anders weet Chrome blijkbaar niet wàt hij moet submitten...

Bedankt voor het meezoeken, en vooral voor de tip om een <img> te gebruiken.
...en nu overal mijn buttons aanpassen...
Sam.
 
Ik bedoelde eerder dit als knop
HTML:
<INPUT TYPE="image" SRC="images/submit.gif" HEIGHT="30" WIDTH="173" BORDER="0" ALT="Submit Form">
http://www.codetoad.com/html/buttons/image_submit_button.asp

Daarnaast is het eerder een JavaScript probleem blijkt. Daarom verplaats ik hem naar die sectie, wellicht krijg je daar nog wat extra tips :)
 
Zelf vindt ik het gebruik van document.forms[x] niet aan te raden.Mocht je later je html omgooien dan kan de volgorde van verschillende forms makkelijk veranderen en werkt je code ineens met het verkeerde form. Er is verder niks mis mee (het is onderdeel van de W3C DOM) maar het is zo onduidelijk als je later nog iets moet veranderen. Mocht je dus voor een javascript oplossing gaan (wat ik niet zou doen) dan kun je het formulier een id geven:
Code:
<form id="blabla" ...>
En in de onlick handler kun je document.getElementById gebruiken:
Code:
document.getElementById('blabla').submit();
Dan kun je je HTML omgooien wat je wilt, als je de id maar niet veranderd.

Het maakt waarschijnlijk niet uit in dit specifieke geval aangezien er maar één form element is, maar het is toch een goede gewoonte om niet van de volgorde van elementen af te hangen.

Maar de oplossing van ThaDevil is de beste. Gebruik een <input type="image" />. Dit is namelijk precies waar ze voor bedacht zijn :p
 
Laatst bewerkt:
Bedankt iedereen voor de hulp.
Eindelijk kan ik inloggen op mijn eigen site, ... ook in Chrome.

De essentie is echter: submit() werkt niet in Chrome zonder de naam van de form ervoor, of zonder het meer generieke document.forms[0] ervoor.

Diegene die dit een bug vindt mag het gerust rapporteren bij Google, want ik heb het nog op geen enkel forum gerapporteerd gezien.

Misschien word ik hierdoor wereldberoemd! ;)
 
het is geen bug. Het is eerder vreemdt dat submit() wel werkt in de andere browsers. Die kan namelijk nooit weten welk formulier je bedoelt. Nou is er toevallig maar één maar dan nog zou submit() een functie van het window object moeten zijn, of een globale javascript functie. En het is geen van beide :rolleyes:

Maar wat Tha Devil zei, <input type="image" /> is een veel beter alternatief dan javascript. Waarom gebruik je dat niet?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan