2

这有效:

 $('#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.ini 的不同部分。

编辑1 试过这个,不工作(在表格下)(不工作,我的意思是它正在正常提交,而不是ajax)

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 
   }
});
4

2 回答 2

4

submitHandler 函数的参数不是 jQuery 事件,它是表单 DOM 对象。所以

  1. 当您调用 e.preventDefault(); 时,您的代码将引发错误;
  2. 调用 $(form).serialize(),而不是 $(this).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>
于 2013-01-10T15:44:57.680 回答
1
function postForm (e) {
    $.post(...);
}
jQuery("#contestform").validate({submitHandler: postForm});
于 2013-01-10T05:43:27.317 回答