Контактная форма AJAX не работает в IE - PullRequest
0 голосов
/ 06 марта 2012

Я ознакомился с одним уроком о том, как создать контактную форму ajax. Учебное пособие доступно здесь:
http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/

Теперь он работает, и мне действительно это нравится, но по какой-то причине он не работает ни в одной версии Internet Explorer (протестировано в Chrome, Firefox и Opera. Работает нормально). Я действительно понятия не имею, что является причиной проблемы.

Вы можете проверить контактную форму здесь: http://freshbeer.lv/new/latvian/contact.php (на латышском языке, первое поле - ваше имя, второе - ваш адрес электронной почты, третье - ваш телефон (не требуется) и четвертое - ваше сообщение)

Вот jQuery для этой формы:

$(function() {
  $('.error').hide(); //Hide error message

  $(".button").click(function() {
    $('.error').hide();

      var name = $("input#name").val(); //Check if name is not empty
        if (name == "") {
      $("label#name_error").show();
      $("input#name").focus();
      return false;
    }

     function isValidEmailAddress(emailAddress) { //Function to check e-mail
     var pattern = new RegExp(/^(("[\w-+\s]+")|([\w-+]+(?:\.[\w-+]+)*)|("[\w-+\s]+")([\w-+]+(?:\.[\w-+]+)*))(@((?:[\w-+]+\.)*\w[\w-+]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][\d]\.|1[\d]{2}\.|[\d]{1,2}\.))((25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\.){2}(25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\]?$)/i);
     return pattern.test(emailAddress);
     };

        var email = $("input#email").val();//Check email with function
        if (!isValidEmailAddress(email)) {
      $("label#email_error").show();
      $("input#email").focus();
      return false;
    }

        var letter = $("textarea#letter").val(); Check if message was entered
        if (letter == "") {
      $("label#letter_error").show();
      $("textarea#letter").focus();
      return false;
    }

        var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone + '&letter=' + letter; //Build Data String

        $.ajax({ //Ajas post data to process.php script
      type: "POST",
      url: "../scripts/process.php",
      data: dataString,
      success: function() { //Display success message
        $('#contact_form').html("<div id='message'></div>");
        $('#message').html("<h2>Contact Form Submitted!</h2>")
        .append("<p>We will be in touch soon.</p>")
      }
     });
    return false;
    });
});

А вот php (process.php), PHP Mailer используется для отправки электронной почты

<?php
if ((isset($_POST['name'])) && (strlen(trim($_POST['name'])) > 0)) {
    $name = stripslashes(strip_tags($_POST['name']));
} else {$name = 'No name entered';}
if ((isset($_POST['email'])) && (strlen(trim($_POST['email'])) > 0)) {
    $email = stripslashes(strip_tags($_POST['email']));
} else {$email = 'No email entered';}
if ((isset($_POST['phone'])) && (strlen(trim($_POST['phone'])) > 0)) {
    $phone = stripslashes(strip_tags($_POST['phone']));
} else {$phone = 'No phone entered';}
if ((isset($_POST['letter'])) && (strlen(trim($_POST['letter'])) > 0)) {
    $letter = stripslashes(strip_tags($_POST['letter']));
} else {$letter = 'No Message';}
ob_start();
?>
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
<table width="550" border="1" cellspacing="2" cellpadding="2">
  <tr bgcolor="#eeffee">
    <td>Name</td>
    <td><?=$name;?></td>
  </tr>
  <tr bgcolor="#eeeeff">
    <td>Email</td>
    <td><?=$email;?></td>
  </tr>
  <tr bgcolor="#eeffee">
    <td>Phone</td>
    <td><?=$phone;?></td>
  </tr>
   <tr bgcolor="#eeeeff">
    <td>Message</td>
    <td><?=$letter;?></td>
  </tr>
</table>
</body>
</html>
<?
$body = ob_get_contents();

require("phpmailer.php");

$mail = new PHPMailer();

$mail->From     = "mail@freshbeer.com";
$mail->FromName = "Bryuvers";
$mail->AddAddress("my@email.com","Name 1"); //new mail

$mail->WordWrap = 50;
$mail->IsHTML(true);

$mail->Subject  =  "New Message!";
$mail->Body     =  $body;
$mail->AltBody  =  "Message from website contact form";

if(!$mail->Send()) {
    $recipient = 'my@email'; //new mail
    $subject = 'Contact form failed';
    $content = $body;   
  mail($recipient, $subject, $content, "From: mail@freshbeer.com\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
  exit;
}
?>

А вот и HTML-код формы

 <form name="contact" action="">
                                <fieldset>
                                  <input placeholder="Jusu vards, uzvards (Obligati)" type="text" name="name" id="name" class="text-input" /><br />
                                  <label class="error" for="name" id="name_error"><b>Ludzu noradiet jusu vardu, uzvardu!</b></label><br />

                                  <input placeholder="e-pasta adrese (Obligati)" type="text" name="email" id="email" class="text-input" /><br />
                                  <label class="error" for="email" id="email_error"><b>Ludzu noradiet jusu e-pastu!</b></label><br />

                                  <input placeholder="Telefona Nr." type="text" name="phone" id="phone" class="text-input" /><br /><br />

                                  <textarea placeholder="Jautajums (Obligati)" name="letter" id="letter" class="text-input" /></textarea><br />
                                  <label class="error" for="letter" id="letter_error"><b>Ludzu uzrakstiet jusu jautajumu!</b></label><br />

                                  <input type="submit" name="submit" class="button" id="submit_btn" value="Nosutit" />
                                </fieldset>
                             </form>

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

переменная javascript 'phone' не определена.

Попробуйте добавить

 var phone = $("#phone").val();

РЕДАКТИРОВАТЬ: Согласно предложению, используйте $ ("# phone") напрямую

1 голос
/ 06 марта 2012

У вас есть ошибка здесь:

...
var letter = $("textarea#letter").val(); Check if message was entered
...

должно быть

...
var letter = $("textarea#letter").val(); // Check if message was entered
...

и с лучшим (более быстрым) селектором,

...
var letter = $("#letter").val(); // Check if message was entered
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...