2015-03-14 5 views
0

Я проверяю форму с помощью плагина jQuery Validate, но каждый раз, когда я отправляю форму, страница перенаправляется на страницу действия. Я не только проверяю форму, но и пытаюсь отправить форму, используя ajax, зная, что форма является бесплатной. Я также использую оповещение bootbox, чтобы показывать ошибки в предупреждениях.jQuery Проверка не работает хорошо

Вот JavaScript файлы я в том числе

<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script> 
<script type="text/javascript" src="js/bootbox.min.js"></script> 
<script type="text/javascript" src="js/jquery.validate.js"></script> 
<script type="text/javascript" src="js/custom.js"></script> 

Вот файл custom.js я использовал для пользовательских JS кодирования

$(document).ready(function() { 
$(document).ajaxStart(function() { 
     $(".loadr").show(); 
     $(".send-btn").attr("disabled", "disabled"); 
     $(".send-btn").css("opacity", "0.5"); 
    }); 
    $(document).ajaxComplete(function() { 
     $(".loadr").hide(); 
     $(".send-btn").removeAttr("disabled", "disabled"); 
     $(".send-btn").css("opacity", "1") 
    }); 
contactus(); 
}); 
function contactus() 
{ 
    var action = $("#CommentForm").attr("action"); 
    $("#CommentForm").validate({ 
     errorElement: "div", 
     errorClass: "error_message", 
     rules: { 
      ContactName: "required", 
      ContactPhone: "required", 
      ContactComment: "required", 
      ContactEmail: { 
       email: true 
      } 
     }, 
     messages: { 
      ContactName: { 
       required: "Please enter your Name." 
      }, 
      ContactPhone: { 
       required: "Please enter your Phone.", 
      }, 
      ContactComment: { 
       required: "Please enter your Message.", 
      }, 
     }, 
     errorPlacement: function(error, element) { 
      //error.hide().insertBefore(element.prev()).show("slide", '', 'fast'); 
     }, 
     invalidHandler: function(event, validator) { 
      var summary = ""; 
      console.log(validator.errorList); 
      jQuery.each(validator.errorList, function() { 
       summary += this.message + '<br />' + "\n"; 
      }); 
      alert(summary); 
     }, 
     onfocusout: function(element) { 
      $("div.error_message").hide(); 
     }, 
     submitHandler: function(form) { 
      $('.loadr').show(); 
      $.ajax({ 
       type: "POST", 
       url: "http://www.mysite.ae/contact.php", 
       data: $(form).serialize(), 
       success: function(data) { 
        $("#CommentForm")[0].reset(); 
        $("#Contactmsgdiv").empty().html('<br /><div class="alert alert-success" style="border: 1px solid;"><strong> Thank you! </strong> We have received your request and will respond shortly!.</div>'); 
        $('.loadr').hide(); 
       } 
      }); 
      return false; 
     } 
    }); 
} 

и здесь HTML-код формы

<form class="progression-contact wpcf7" id="CommentForm" method="post" action="contact.php" novalidate="novalidate"> 
          <fieldset> 
           <div> 
            <p><input id="ContactName" name="ContactName" class="textInput" placeholder="Name" /></p> 
           </div> 
           <div> 
            <p><input id="ContactEmail" name="ContactEmail" class="textInput email" placeholder="E-mail" /></p> 
           </div> 
           <div> 
            <p><input id="ContactPhone" name="ContactPhone" class="textInput digits" value="" placeholder="Phone" /></p> 
           </div> 
           <div> 
            <p><textarea id="ContactComment" name="ContactComment" class="textInput" rows="10" cols="4" placeholder="Your Message"></textarea></p> 
           </div> 
           <div> 
            <p><button type="submit" class="progression-contact-submit wpcf7-submit"><span>Send Us Your Message</span></button><img src="http://www.mysite.ae/images/bx_loader.gif" style="margin-left:15px;display:none; " class="loadr"></p> 
           </div> 
          </fieldset> 
        </form> 
+0

Если метод '.validate()' не получил вызов в DOM, код, связанный с плагином jQuery Validate, работает отлично: http://jsfiddle.net/kr7sebcw/ – Sparky

+0

До тех пор, пока плагин инициализирован (метод '.validate()'), и вы установили 'submitHandler' (вы это делаете), практически невозможно, чтобы форма обходилась и отправлялась в действие' default'. Даже неважно, что внутри функции 'submitHandler' ... просто включить его в' .validate() 'достаточно, чтобы заблокировать действие' default' по умолчанию. – Sparky

+0

Если вы видите, что плагин validate вызывается в функции contactus, а функция contactus() сама вызывается в DOM ready –

ответ

-1

Если вы не хотите отправить форму, используя действие, просто измените кнопку отправки на обычную кнопку. Это приведет к отключению события ajax без отправки формы. Смотри ниже.

<form class="progression-contact wpcf7" id="CommentForm" method="post" action="contact.php" novalidate="novalidate"> 
         <fieldset> 
          <div> 
           <p><input id="ContactName" name="ContactName" class="textInput" placeholder="Name" /></p> 
          </div> 
          <div> 
           <p><input id="ContactEmail" name="ContactEmail" class="textInput email" placeholder="E-mail" /></p> 
          </div> 
          <div> 
           <p><input id="ContactPhone" name="ContactPhone" class="textInput digits" value="" placeholder="Phone" /></p> 
          </div> 
          <div> 
           <p><textarea id="ContactComment" name="ContactComment" class="textInput" rows="10" cols="4" placeholder="Your Message"></textarea></p> 
          </div> 
          <div> 
           <p><button type="button" class="progression-contact-submit wpcf7-submit"><span>Send Us Your Message</span></button><img src="http://www.mysite.ae/images/bx_loader.gif" style="margin-left:15px;display:none; " class="loadr"></p> 
          </div> 
         </fieldset> 
       </form> 
+0

** Это не сгорит его 'ajax()' **. 'Ajax()' является частью функции 'submitHandler' OP, которая будет запущена только тогда, когда' type = "submit" 'будет нажата на действительную форму. Другими словами, OP 'ajax()' должен уже работать, и тип кнопки не нарушает его JavaScript. – Sparky

+0

Ему просто нужно привязать логику в submitHandler к кнопке вне функции проверки. – icsmith23

+0

Или попробуйте позвонить $ ('# CommentForm'). Submit (false); – icsmith23

0

я, наконец решить этот вопрос :) Я фактически использовал bootbox и забыл CSS и JS файлы, которые Bootstrap являются также необходимо использовать bootbox и там был еще один файл JS, который создает проблемы, я включил его после того, как выше упомянутый JS, и он работал как шарм

Смежные вопросы