Formulaire input type=“submit” ne semble pas déclencher le onsubmit gestionnaire
Je suis tenter de déclencher une fonction javascript via onsubmit pour valider mon formulaire.
Je sais que la fonction elle-même fonctionne car je peux l'appeler à l'intérieur des balises de script immédiatement après la forme de balise, et je reçois ma console.message du journal et les messages d'erreur, il crée apparaissent sur le formulaire.
Le PHP de validation lui-même fonctionne, mais j'ai seulement été en mesure de soumettre le formulaire via du javascript .submit
placée sur un div. Bien sûr, parce que cela contourne toute la validation côté client, je ne peux pas le quitter de cette façon, donc je l'ai remplacé mon div id="submit"
avec un input type="submit"
.
J'ai été à la recherche à d'autres exemples, y compris les formulaires que j'ai codé moi-même dans le passé que je sais de travail, et semblent complètement hors de réponses. C'est probablement incroyablement facile, et pour certaines raisons, je ne peux pas et je n'ai pas pu le voir durant les 6 dernières heures. o_O
Voici mon formulaire de balisage:
<form name="emailus" id="emailus" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="return validateForm();">
<a href="mailto:[email protected]">
<h3><i class="icon-envelope-alt icon-large"></i>Send us an email<span>: [email protected]</span></h3>
</a>
<div class="half">
<fieldset class="name">
<label for="cf_name"><h4>Name <span>*</span></h4></label>
<input type="text" name="cf_name" class="textualformfield" alt="Jane Doe" pattern="^[a-zA-Z'\s]+$">
</fieldset>
<fieldset class="emailaddress">
<label for="cf_email"><h4>E-mail <span>*</span></h4></label>
<input type="text" name="cf_email" class="textualformfield" alt="[email protected]" pattern="{long string of regex}">
</fieldset>
<fieldset class="phonenumber">
<label for="cf_phonenumber"><h4>Phone</h4></label>
<input type="tel" name="cf_phonenumber" class="textualformfield" alt="555-555-5555">
</fieldset>
<fieldset class="eventdate">
<label for="cf_eventdate"><h4>Event Date</h4></label>
<input type="text" name="cf_eventdate" class="textualformfield" alt="May 25th, 2012">
</fieldset>
<fieldset class="location">
<label for="cf_location"><h4>Location</h4></label>
<input type="text" name="cf_location" class="textualformfield" alt="The Church">
</fieldset>
</div>
<div class="half">
<textarea name="cf_message" class="textualformfield" alt="Your Message"></textarea>
</div>
<input type="submit" for="emailus" name="submit" id="submit" value="Submit">
</form>
J'ai essayé plusieurs différentes itérations de onsubmit="return validateForm();"
—avec ou sans le point-virgule, l'écriture comme onSubmit
ou onsubmit
... je ne sais pas. Je ne vois pas quel est le problème avec cette à toutes. Quelqu'un?
Ci-dessous est la fonction à appeler onsubmit
, validateForm
. Il est situé dans un autre fichier, mais le fichier est toujours inclus lorsque le formulaire est, et j'ai assuré cette fonction n'est pas dans $(document).ready
et est disponible dans le monde entier comme je l'ai appelé de l'intérieur des balises de script directement à la suite de la forme.
var validateForm = function() {
var valid = true;
jQuery('p.validationhelpers').remove();
if (document.emailus.cf_email.value == "" || document.emailus.cf_email.value == "[email protected]") {
jQuery('.emailaddress').append("<p class='validationhelpers'>Please enter an email address.</p>");
jQuery('.emailaddress>input').focus();
valid = false;
}
if (document.emailus.cf_name.value == "" || document.emailus.cf_name.value == "Jane Doe") {
jQuery('.name').append("<p class='validationhelpers'>Please enter your name.</p>");
jQuery('.name>input').focus();
valid = false;
}
console.log("I was triggered");
return valid;
}
Edit 2: Ajout de PHP Validation/code postal:
<?php if (!empty($_POST) ) {
$field_name = $_POST['cf_name'];
$field_email = $_POST['cf_email'];
$field_phone = $_POST['cf_phonenumber'];
$field_eventdate = $_POST['cf_eventdate'];
$field_location = $_POST['cf_location'];
$field_message = $_POST['cf_message'];
$mail_to = '[email protected]';
//final attempt at validation or email submission preventation
if ($field_name == "Jane Doe" || empty($field_name) || $field_email == "[email protected]" || empty($field_email)) {
return false;
}
if (!($field_eventdate == "May 25th, 2012") && !empty($field_eventdate) && !($field_name == "Jane Doe") && !empty($field_name)) {
$subject = 'Request for '.$field_date. ' from '.$field_name . 'via thiswebsite.com';
} else {
$subject = $field_name . ' has contacted you via thiswebsite.com';
}
if (!($field_name == "Jane Doe") && !empty($field_name)) {
$body_message = 'Client\'s Name: '.$field_name."\n\n";
}
if (!($field_email == "[email protected]") && !empty($field_email)) {
$body_message .= 'E-mail: '.$field_email."\n\n";
}
if (!($field_phone == "555-555-5555") && !empty($field_phone)) {
$body_message .= 'Phone: '.$field_phone."\n\n";
}
if (!($field_eventdate == "May 25th, 2012") && !empty($field_eventdate)) {
$body_message .= 'Event Date: '.$field_eventdate."\n\n";
}
if (!($field_location == "The Church") && !empty($field_location)) {
$body_message .= 'Location: '.$field_location."\n\n";
}
if (!($field_message == "Your Message") && !empty($field_message)) {
$body_message .= 'Message: '. "\n".$field_message;
}
$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
$body_message = stripslashes($body_message);
if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
jQuery(document).ready(function () {
jQuery('#contactus').before("<hr class='confirmationhelpers'><p class='confirmationhelpers'>Your e-mail has been sent!<br/>Thank you! We'll contact you shortly.</p><hr class='confirmationhelpers'>");
});
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
jQuery(document).ready(function () {
alert('It seems there\'s been an error. Please, send an email to [email protected] to request your appointment.');
});
</script>
<?php
}
}
?>
Juste pour être clair, quand je clique sur le bouton Submit, absolument rien ne se passe.
- pourriez-vous poster votre sur submit()
- et validateForm
- Essayer de supprimer l'utilisation de
return
sur leonsubmit
valeur, et tout simplementvalidateForm()
, ou, mieux encore:validateForm(); return false;
dans le cas où le premier n'a pas de retour d'un truthy ou falsy valeur. En qu'est-ce que l'utilisation defor
sur la soumettre des commentaires? - s'assurer que votre validateForm() retourne true en cas de succès de la validation
- tout d'abord supprimer l'attribut dans l'input[type=submit], en vérifiant le code javascript doit être la prochaine étape, mais assurez-vous il n'y a pas de commande javascript prévention de la soumission, puisque vous vous attendez à une soumission.
- u peut créer un lien
- est le
validateForm
fonction de ce que vous vouliez dire pour moi de poster? Ou êtes-vous référant au PHP de la partie? - Hmm... essayé ceux tout à l'heure, en vain. Le
for
n'était pas pour rien. C'était un produit de mes tentatives pour résoudre ce problème quand je pensais "il n'est pas ... en les reliant à la forme ou à quelque chose?" Il est parti aujourd'hui, comme par votre et @w3jimmy recommandations. - là où le contrôle est de sauter
- Un lien vers le site afin que vous puissiez voir exactement ce qui se passe? Assurez-vous. Cliquez ici, puis cliquez sur Contact.
- ce qui se passe quand vous faites cela:
onsubmit='return true;'
ou sans avoir le onsubmit gestionnaire lui-même - Rien, dans les deux cas. Suppose que son temps de prendre un coup d'oeil à la partie PHP de ma validation, hein? Ajouter maintenant...
- oui le code php peut être la clé. Espérons que vous n'avez pas toutes les erreurs js dans la console. Jetez un oeil sur elle.
- Seulement facebook d'intégration liées à l'erreur, mais il n'a pas touché autre chose que la console de débogage (que je connais).
Vous devez vous connecter pour publier un commentaire.
Votre jQuery est le blocage de la soumettre le formulaire ici:
Je veux dire, quand je debug de votre site, et appuyez sur le bouton "envoyer", j'arrive à la
return false;
ci-dessus, après quoi le traitement des événements est plus.onsubmit="return validateForm()"
si vous voulez que votre validateForm fonction pour être en mesure de prévenir les invalides formes de soumis.La raison rien ne se passe, c'est que vous utilisez le nouveau html5 "pattern" attribut qui tente de regex valider votre entrée avant même qu'il n'atteigne votre valider la fonction. Supprimer le motif de l'attribut et essayez à nouveau.
pattern
attribut aux côtés de validation javascript avant et il n'a pas semblé aller dans le chemin, bien que je me souviens, il s'précédent à un certain point.