Toon posts:

[HTML / JS] Form enteren werkt niet zoals het moet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Eerst een beetje code opmaak:

De index bestaat uit 2 frames (menu_farme & main_frame).
In iedere pagina in het main_frame wordt dmv php een topmenu ge-include waarin een form staat.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<head></head>

<body>
<?php
include "../topmenu.inc";
?>

....code pagina waar het niet om gaat.....


</body>
</html>

In het topmenu staat een simpel zoekformulier waar het wel om draait.
code:
1
2
3
4
5
6
<table>
<tr>
      <td><input type="text" onKeyDown="checkEnter();" name="zk"></td>
      <td><a href="#" onclick="document.forms[0].submit();">[img]"../images/buttons/button_zoek.gif"[/img]</a></td>
</tr>
</table>

Dan heb ik de functie:
code:
1
2
3
4
5
6
7
8
9
10
<script language='javascript'>
function checkEnter() {
       if (event.keyCode == 13) {
              var zoeken = 'pagina.php?zk=';
                  zoeken += document.forms[0].elements[0].value;

              parent.frames['main_frame'].location.replace(zoeken);
       }
}
</script>
Om het formulier te submitten met de enter-toets en door te sturen naar een bepaalde pagina.
En dit werkt dus niet. Hij "refresht" de pagina die op dat moment in het main_frame staat. Ook doet hij het niet als ik er
code:
1
document.location.replace();
van maak. Terwijl het topmenu in het "document" wordt ge-include. Maar..........
Als ik het frame verander in menu_frame doet hij het wel 8)7 Dan laadt hij de pagina gewoon in het menu. :?
Ook als ik er een ander event aan hang (bv. document.write();) dan doet hij het ook.

Hoe kan het dat hij het wel doet naar een ander frame toe of een ander event, maar dat hij het niet doet als ik in hetzelfde frame een andere pagina wil aanroepen.?

Zie ik iets over het hoofd?

  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

het "action" attribuut van en <form> element dient ervoor om het formulier na submitten door te sturen naar een bepaalde pagina (en is ook verplicht). je zou dus gewoon het form moeten submitten ipv location.replace().

[ Voor 9% gewijzigd door Sappie op 21-04-2005 11:01 ]

Specs | Audioscrobbler


Verwijderd

Topicstarter
Het action attribuut is dus niet verplicht.
Ik heb in mijn site ongeveer 50 formulieren die niet 1x dmv een action in het form attribuut worden verstuurd. Ik lees ze allemaal uit met javascript en gooi ze dan door naar een ander pagina dmv location.replace.

  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

wél verplicht: http://www.w3.org/TR/html4/interact/forms.html#edef-FORM
dus ga je site nog maar es driftig aanpassen dan :)

[ Voor 28% gewijzigd door Sappie op 21-04-2005 11:16 ]

Specs | Audioscrobbler


Verwijderd

Topicstarter
Verplicht in mijn beleving is als je het weg laat de boel niet meer werkt.
Waarom kan ik dan al mijn formulieren wel verzenden?

Maar goed, dit is welles nietes, mijn probleem ligt in ieder geval niet aan hetgeen dat er geen action in de form tag staat. Dat werkt namelijk bij de rest van de forms ook.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

Het probleem daarmee is dat internet explorer er automatisch een action toevoegd als deze er niet staat dus in IE zal je geen probleem krijgen. Verder zou ik je javascript ook niet op een input veld zetten om vervolgens de keycode op te vragen aangezien het op het zoals je het nu doet ook alleen maar in IE zal werken.

Je zou het beter in een onsubmit op de form tag kunnen aangeven lijkt mij. Aangezien je dan helemaal niets meer met het keycode event te maken hebt.

disjfa - disj·fa (meneer)
disjfa.nl


  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

Goed... waarschijnlijk ben je er dan toch niet van te overtuigen dat het beter is deze wel te gebruiken omdat het een zooi javascript scheelt.

Verder gebruik je in je code wel:
code:
1
onclick="document.forms[0].submit();"

Dit doet dan dus niets?

Om op je probleem terug te komen.. alert "zoeken" es voor location.replace().

[ Voor 7% gewijzigd door Sappie op 21-04-2005 11:31 ]

Specs | Audioscrobbler


Verwijderd

Topicstarter
Voor sommige een doorn in het oog, maar ik ben ook een IE-only business software aan het maken en ik wil persé met de location.replace blijven werken omdat ik geen history achter wil laten.

Ik vind het alleen heel vreemd dat hij het bij al mijn andere formulieren wel doet en bij deze niet.
Heeft het niet iets te maken met die include. Zodat de structuur van een "document" anders wordt?

Verwijderd

Topicstarter
Vergeten te melden (sorry).........

Als ik gewoon op de button click, dan doet alles het prima. Ik wil alleen ook dat als de cursor in het textvak staat, het formulier ook verzonden wordt met de enter-toets.

Verwijderd

Topicstarter
Sappie schreef op donderdag 21 april 2005 @ 11:29:
Goed... waarschijnlijk ben je er dan toch niet van te overtuigen dat het beter is deze wel te gebruiken omdat het een zooi javascript scheelt.
Ik ben zeker wel te overtuigen. Ik weet zelfs al dat het beter, sneller en makkelijker is. Maar ik heb nou eenmaal voor een andere (voor sommige heel onlogische) oplossing gekozen.

  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

een php include doet nix meer dan het geïnclude bestand evalueren en (na eventueel parsen) vervolgens includen. Je include statement wordt dus vervangen door de inhoud van het geïnclude bestand.
Verwijderd schreef op donderdag 21 april 2005 @ 11:34:
Vergeten te melden (sorry).........

Als ik gewoon op de button click, dan doet alles het prima. Ik wil alleen ook dat als de cursor in het textvak staat, het formulier ook verzonden wordt met de enter-toets.
Dat ligt dan waarschijnlijk aan het feit dat IE automatisch een action atrribuut toevoegd (in jouw geval (toevallig) het goede), zoals disjfa opmerkte.
Heb je "zoeken" al ge-alert? :)

[ Voor 60% gewijzigd door Sappie op 21-04-2005 11:40 ]

Specs | Audioscrobbler


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:50

crisp

Devver

Pixelated

waarom moeilijk doen met javascript als dat helemaal niet hoeft?
HTML:
1
2
3
4
<form action="pagina.php" method="get" target="main_frame">
  <input type="text" name="zk">
  <input type="image" src="../images/buttons/button_zoek.gif">
</form>

Intentionally left blank


  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

crisp schreef op donderdag 21 april 2005 @ 11:40:
waarom moeilijk doen met javascript als dat helemaal niet hoeft?
HTML:
1
2
3
4
<form action="pagina.php" method="get" target="main_frame">
  <input type="text" name="zk">
  <input type="image" src="../images/buttons/button_zoek.gif">
</form>
tja.. dat heb ik ook al aangekaart, maar daar had hij, zoals je had kunnen lezen, zijn redenen voor :)

Specs | Audioscrobbler


Verwijderd

Topicstarter
Inderdaad net ge-alert.... geeft precies de locatie en pagina weer die hij weer zou moeten geven. Dat is ook het probleem niet, want als ik de target verander in het menu, dan doet hij het wel.

btw, ik verstuur mijn forms niet met een javascript submit(), maar met een een nogal hele lange javascript code, ivm die history die ik niet achter wil laten. En die werken allemaal met een location.replace en er komt geen submit aan te pas, dus dat verhaal met de action de IE toevoegd, kan ik me niet voorstellen.

Wil je de code zien?

check: [rml][ HTML/Javascript] Geen history[/rml]

[ Voor 6% gewijzigd door Verwijderd op 21-04-2005 11:43 ]


  • Sappie
  • Registratie: September 2000
  • Laatst online: 27-04 07:10

Sappie

De Parasitaire Capaciteit!

Maar je roept na clicken op die button de submit methode aan:
code:
1
onclick="document.forms[0].submit();"

Of je hebt deze methode overschreven (zal denk ik wel mogelijk zijn met javascript, maar dat weet ik niet) of hij maakt toch echt gebruik van het (automatisch toegevoegde) action attribuut.

Specs | Audioscrobbler


Verwijderd

Topicstarter
Sappie schreef op donderdag 21 april 2005 @ 11:45:
Maar je roept na clicken op die button de submit methode aan:
code:
1
onclick="document.forms[0].submit();"

Of je hebt deze methode overschreven (zal denk ik wel mogelijk zijn met javascript, maar dat weet ik niet) of hij maakt toch echt gebruik van het (automatisch toegevoegde) action attribuut.
Ik heb inderdaad in mijn eerste post dit omschreven ja, om het "even simpel" te houden. Maar hij werkt dus eigenlijk met dat enorme javascript, zoals het bij de rest van al mijn forms ook werkt.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

Dus jij vangt de waardes af mbv javascript. Kan je als gebruiker dus alles aan veranderen wat je maar wilt. Wel handig als je zo`n get request wilt restylen naar hoe je als gebruiker wilt.

Ik zou al die waardes als ik jou was nakijken in php ipv in javascript aangezien je geheel niets checkt op of iets is ingevult of niet. Dan kan je op het formulier een get methode meegeven en als je dan nog eens de logica van crisp erbij pakt heb je geheel geen javascript meer nodig.

Maargoed als je klant het zo wilt ;) Het zit imho een beetje knullig inelkaar zover ik kan zien iig :)

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

Topicstarter
disjfa schreef op donderdag 21 april 2005 @ 11:50:
Dus jij vangt de waardes af mbv javascript. Kan je als gebruiker dus alles aan veranderen wat je maar wilt. Wel handig als je zo`n get request wilt restylen naar hoe je als gebruiker wilt.

Ik zou al die waardes als ik jou was nakijken in php ipv in javascript aangezien je geheel niets checkt op of iets is ingevult of niet. Dan kan je op het formulier een get methode meegeven en als je dan nog eens de logica van crisp erbij pakt heb je geheel geen javascript meer nodig.

Maargoed als je klant het zo wilt ;) Het zit imho een beetje knullig inelkaar zover ik kan zien iig :)
Kan jij me dan uitleggen hoe ik op een andere manier met het versturen van een formulier geen history achter laat?

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

Verwijderd schreef op donderdag 21 april 2005 @ 11:54:
[...]
Kan jij me dan uitleggen hoe ik op een andere manier met het versturen van een formulier geen history achter laat?
Wat is precies het doel van geen history achter laten?

disjfa - disj·fa (meneer)
disjfa.nl


  • MaTriCX
  • Registratie: Augustus 2002
  • Laatst online: 18-07-2024
disjfa schreef op donderdag 21 april 2005 @ 11:56:
[...]

Wat is precies het doel van geen history achter laten?
Ja dat begrijp ik ook niet helemaal, de back- forward-buttons zijn gemaakt voor de gebruikersvriendelijkheid. Alleen bij het submitten van forms begrijp ik dat je geen history wilt ivm verkeerde data. Maar als je POST gebruikt, dan zal de browser eerst gerefreshed moeten worden voordat deze de data opnieuw doorgeeft.

Daarnaast zijn boven gegeven opties inderdaad netter en conform de W3c standaard. En de mogelijkheid bestaat dat wanneer IE in de toekomst ooit een keer echt de w3c standaard gaat volgen, je scripts niet meer werken.

[edit]
Kun je dit specifieke gedeelte niet even online zetten, dan krijg je een wat helder beeld van wat er nu precies fout gaat.

[ Voor 11% gewijzigd door MaTriCX op 21-04-2005 12:02 ]


  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Mag ik vragen om wat voor een soort site/project het hier gaat? Ik kan me namelijk niet voorstellen dat een normale gebruiker hier graag gebruik van zou willen maken.

Huur mij in als freelance SEO consultant!


Verwijderd

Topicstarter
Wat is precies het doel van geen history achter laten?
Extra stukje veiligheid. Zeg maar, na bezoek niet meer kunnen prutsen in de achtergelaten url's.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

MaTriCX schreef op donderdag 21 april 2005 @ 11:59:
[...]
dan zal de browser internet explorer eerst gerefreshed moeten worden voordat deze de data opnieuw doorgeeft.
Verwijderd schreef op donderdag 21 april 2005 @ 12:00:
[...]
Extra stukje veiligheid. Zeg maar, na bezoek niet meer kunnen prutsen in de achtergelaten url's.
Dat kan juist wel als je het oplost zoals je dat wilt. Een keer een url kopieren en de volgende keer kan je het verpesten zoals je het zelf wilt. Als ik jou was zou ik naar php kijken en wat een header kan doen met bijvoorbeeld een Location ;)

Met javascript kan je een site niet veilig maken aangezien een user zelf alles kan veranderen. Of als hij geen javascript heeft... Wat zou er dan gebeuren....

disjfa - disj·fa (meneer)
disjfa.nl


Verwijderd

Topicstarter
Korte uitleg dan....

Het wordt een online finaciele business-software die ik zo min mogelijk wil laten voordoen alsof het online is. Het is wel online maar krijgt een stand-alone uiterlijk. Dus full screen op de titelbalk na, en ga zo maar door. Men kan dus sowieso geen forward en back buttons gebruiken.

Ik heb dus zoveel mogelijk internet kenmerken eruit gehaald om de gebruiker het gevoel te geven dat ze in een stand-alone omgeving werken.

Het is dus niet iets wat op een homepage komt en door de strot van de gebruiker wordt gedrukt.
Pagina: 1