2013-01-10 2 views
2

это работает:jQuery Подтвердить: Как отправить() после заполнения формы?

$('#contestform').on('submit', function(e) { 
    $.post('/', $(this).serialize(), function(response){ 
    console.log(response); 
},'json'); 
    e.preventDefault(); 
}); 

и это работает

jQuery("#contestform").validate(); 

Но я не могу понять, как заставить их работать вместе. Я хочу, чтобы материал из верхнего кода произошел только в том случае, если нажата кнопка отправки и форма действительна. Я пробовал материал от http://docs.jquery.com/Plugins/Validation/validate#toptions, но я думаю, что я его не получаю. У меня было что-то вроде работы в какой-то момент, но вам нужно дважды щелкнуть ссылку.

Одна вещь, если я могу помочь, я хочу сохранить материал post() в отдельной функции, так как две части будут поступать из разных частей php.

редактировать 1 пытался это, не работает (по форме) (по не работает, я имею в виду, что это представление обычно не АЯКС)

function postForm(e) { 
    jQuery.post('/', $(this).serialize(), function(response){ 
    console.log(response); 
},'json'); 
    e.preventDefault(); 
} 
jQuery("#contestform").validate({submitHandler: postForm}); 

edit2 Ну, я получил его работу с плагином jQuery.Form http://www.malsup.com/jquery/form/#ajaxSubmit Тем не менее, я хотел бы знать, что я делал неправильно в своем коде выше.

function showResponse(responseText, statusText, xhr, $form){ 
    console.log(responseText); 
} 
var soptions = { 
     success: showResponse , 
     dataType: 'json' 
     }; 

jQuery("#contestform").validate({ 
    submitHandler: function(form) { 
    jQuery(form).ajaxSubmit(soptions); 
     return false; // always return false to prevent standard browser submit and page navigation 
    } 
}); 

ответ

3

Аргумент функции submitHandler не является событием Jquery это объект формы DOM. Таким образом,

  1. Ваш код вызывает ошибку при вызове e.preventDefault();
  2. вызов $ (форма) .serialize(), а не $ (это) .serialize()

, чтобы получить edit1 рабочее сделать это

<script> 
$(function() { 
    $("form").validate({ 
     submitHandler: function (form) { 
      $.post('/your_url/', 
      $(form).serialize(), function (response) { 
       console.log(response); 
      }, 'json'); 
     } 
    }); 
}); 
</script> 

или сохраняя функцию postForm отдельный

<script> 
$(function() { 

    function postForm(form) { 
     $.post('/your_url/', 
      $(form).serialize(), 
      function (response) { console.log(response); }, 
      'json'); 
    } 

    jQuery("form").validate({ 
     submitHandler : postForm 
    }); 
}); 
</script> 
+0

Танки, отлично работает. –

1
function postForm (e) { 
    $.post(...); 
} 
jQuery("#contestform").validate({submitHandler: postForm}); 
+0

см. Отредактированный вопрос, не работает, но я, вероятно, неправильно настроил свою функцию. –

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