2009-06-12 11 views
4

Sur mon FORM, pour une raison quelconque, je peux obtenir ma variable d'entrée de formulaire via onsubmit mais sans utiliser action.JavaScript - Form OnSubmit fonctionne mais Action ne fonctionne pas

Cela fonctionne:

<form onsubmit="javascript:myFunc(this.city.value);"> 
    <p><input type="text" id="city-field" name="city" onfocus="this.select();" /> <input type="submit" value="Find" /></p> 
</form> 

Cela ne fonctionne pas (this.city.value se trouve être nulle)

<form action="javascript:myFunc(this.city.value);"> 
    <p><input type="text" id="city-field" name="city" onfocus="this.select();" /> <input type="submit" value="Find" /></p> 
</form> 

Pourquoi est-ce que onsubmit peut obtenir le this.city.value mais l'événement action ne peut pas?

Répondre

11

La balise d'action de forme ne fait pas référence à quoi que ce soit avec this

Au lieu de cela, utilisez une forme position absolue

action="javascript:myFnc(document.getElementById('city-field').value)" 
4

Modifier: Grâce au commentaire de Christoph, ci-dessous, j'ai réalisé mon énorme erreur. Voici la solution finale avec sa suggestion implémentée.

<form action="" onsubmit="myFunc(this.city.value); return false;"> 
    <p><input type="text" id="city-field" name="city" onfocus="this.select();" /> <input type="submit" value="Find" /></p> 
</form> 

Ceci devrait faire ce dont vous avez besoin. Je m'excuse de ne pas vous avoir accordé toute mon attention dans mes réponses précédentes.

+1

Cela provoque le rechargement de la page - Je n'ai pas besoin de recharger la page. –

+0

Je l'ai remarqué juste après avoir posté ma réponse, mais j'ai depuis mis à jour pour inclure un exemple qui ne recharge pas. – bchang

+2

vous pouvez empêcher l'action par défaut en renvoyant false dans le gestionnaire d'événements, c'est-à-dire 'onsubmit =" myFunc (this.city.value); return false; "' – Christoph

0

HTML sont utilisés pour l'envoi de données vers un script sur le serveur pour le traitement des données. Lorsqu'un formulaire est soumis, les données dans les champs du formulaire sont transmises au serveur sous la forme de paires nom-valeur. Les scripts côté serveur, qui peuvent être écrits dans plusieurs langues différentes, sont utilisés pour traiter les données entrantes et renvoyer une nouvelle page HTML au navigateur. La page renvoyée au navigateur peut être quelque chose d'un message «Merci de vous être enregistré» ou d'une liste de résultats de recherche générés à partir d'une requête de base de données.

puisque le formulaire est pour envoyer des données à un autre fichier sur le serveur. en action, nous ne pouvons spécifier que le chemin vers lequel nous devons envoyer les données. donc là vous ne pouvez pas obtenir les valeurs que la forme a.

Questions connexes