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 le onsubmit valeur, et tout simplement validateForm(), 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 de for 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).