HTML5 php подтверждение скрипта контактной формы - PullRequest
2 голосов
/ 17 мая 2011

У меня возникли проблемы с подтверждением сценария.По умолчанию он скрывает контактную форму и отображает подтверждающее сообщение, но это работает не для всех браузеров.После некоторых тестов я понял, что он не работает для большинства версий IE, которые составляют около 40% моих посетителей.

Как заменить hide-and-show-msg на thankyou.html?Я предполагаю, что это работает, так как большинство IE не отображают подтверждающее сообщение, хотя им удается скрыть форму.Код в заголовке в настоящее время:

<script src="php/js/jquery.validate.js"></script>
<script src="php/js/jquery.placeholder.js"></script>
<script src="php/js/jquery.form.js"></script>
<script>
$(function(){
$('#contact').validate({
submitHandler: function(form) {
    $(form).ajaxSubmit({
    url: 'thankyou.php',
    success: function() {
    $('#contact').hide();
    $('#contact-form').append("<p class='thanks'>Thank you! The message was sent.</center></p>")
    }
    });
    }
});         
});
</script>

Ответы [ 3 ]

1 голос
/ 17 мая 2011

решаемая.

Чтение http://groups.google.com/group/jquery-en/browse_thread/thread/58a9cbc1068d28c0/eb4bedb2cc36b126?pli=1

Я добавил условный скрипт

<head>
<!--[if IE]>
<script >
document.createElement("section"); 
</script >
<![endif]-->

http://plungjan.name/test/testform_validation.html

Вам нужно добавить элемент, понятный IE.

Если вам не нужен условный скрипт, добавьте div в конец страницы и добавьте к нему вместо этого, как здесь: http://plungjan.name/test/testformvalidation.html


Другая проблема : Я получил

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)
Timestamp: Tue, 17 May 2011 13:15:29 UTC


Message: Unexpected call to method or property access.
Line: 5569
Char: 5
Code: 0
URI: http://code.jquery.com/jquery-1.6.1.js

Кажется, что finally не поддерживается

Когда я добавил catch(e) {} до того, как наконец - ошибка исчезла

resolveWith: function( context, args ) {
  if ( !cancelled && !fired && !firing ) {
    // make sure args are available (#8421)
    args = args || [];
    firing = 1;
    try {
      while( callbacks[ 0 ] ) {
        callbacks.shift().apply( context, args );
      }
    }
    catch(e) { /* ADDED BY ME */ }
    finally {
      fired = [ context, args ];
      firing = 0;
    }
  }
  return this;
},
0 голосов
/ 17 мая 2011

Установите thankyou.php как действие формы и используйте jQuery validate () только для того, чтобы убедиться, что поля формы заполнены:

<script>
    $(function(){
       $('#contact').validate({
            // Validate your form fields here
       });
    });
</script>
...
<form id="contact" action="thankyou.php" method="post">

Используйте thankyou.php для обработки отправки формы и перенаправления пользователяto thankyou.html:

<?php
header("Location: thankyou.html");
?>

Этот подход избавит от необходимости скрывать вызов AJAX и скрывать формы.

0 голосов
/ 17 мая 2011

Заменить

$('#contact').hide();     $('#contact-form').append("<p class='thanks'>Thank you! The message was sent.</center></p>")

с window.location.href="thankyou.html";

Простое решение. Конечно, этот код использует относительные пути, замените «thankyou.html» фактическим местоположением этой страницы.

Кроме того, возьмите часть, которая говорит </center>. Вы не должны добавлять закрывающий тег в этот код, центральный объект уже должен быть правильно закрыт. Возможно, это проблема, почему IE не показывает это. HTML кодирован неправильно.

РЕДАКТИРОВАТЬ: И да, если вы так склонны, вы можете использовать jQuery через $(window.location).attr('href', 'thankyou.html'); хотя это не дает никаких преимуществ моему первоначальному решению, которое легче читать и понимать, не говоря уже о том, что оно происходит быстрее.

...