提交表单 - 等到动画结束

时间:2013-06-26 22:34:01

标签: javascript jquery forms animation

我有一个登录信息,并在<div>上提交fadeOut()和另一个fadeIn(),但它不会等待动画完成。

这是我的代码:

JavaScript的:

function xSubmit(){
  $('#login').fadeOut(800);
  $('#logo').fadeIn(1500);
}

HTML:

<div id='logo' style="display: none;">
  <img src="{{ STATIC_URL }}pics/pic.png">
</div>
<div id='login'>
  <form method="post" id='loginForm' action="{{ action_url }}" autocomplete="off">
   <table>
      <tr>
      </tr>
        <th>Benutzer:</th>
        <td><input type="text" id="username" name="username"></td>
      <tr>
        <th>Passwort:</th>
        <td><input type="password" id="password" name="password"><td>
      </tr>
      <tr>
        <td><input type="submit" value="Login" onclick="xSubmit();"></td>
        <td></td>
      </tr>
   </table>
  </form>
</div>

4 个答案:

答案 0 :(得分:2)

你必须告诉jQuery一个完成启动另一个,像这样:

表格:

<input type="submit" value="Login" id="btnSubmit">

动作(删除函数xSubmit(){并添加此:

$('#btnSubmit').click(function(e){
    e.preventDefault();
    $('#login').fadeOut(800, function() {
        $('#logo').fadeIn(1500, function(){
            $('#loginForm').submit();
    });
});

答案 1 :(得分:1)

你可以使用jQuery .promise()方法,它会等到动画结束然后再提交。

xSubmit(){
    $('#login').fadeOut(800).promise().done(function(){
      $("#loginForm").submit();
    });
    return false;
}

或者在fadeOut方法上使用回调:

xSubmit(){
  $('#login').fadeOut(800, function(){
       $("#loginForm").submit();
  })
  return false;
}

编辑: 您可以通过从函数返回false来阻止表单子目录

您还可以选择在输入中使用事件参数

<input type="submit" value="Login" onclick="xSubmit(event);"/>

并通过调用event.preventDefault();

来阻止提交

答案 2 :(得分:1)

你可以传递其他动画作为第一个回调,如下所示:

function xSubmit(){
    $('#login').fadeOut(800, function() {
        $('#logo').fadeIn(1500);
    });
}

答案 3 :(得分:1)

我建议:

  1. 使用onsubmit上的<form>来捕捉按钮和回车键的提交。
  2. 通过返回false
  3. 来阻止表单提交
  4. 淡出完成后提交表格。
  5. JS:

    function xSubmit(formOBJ){
        $('#login').fadeOut(800);
        $('#logo').fadeIn(1500,function() {formOBJ.submit();});
        return false;
    }
    

    HTML:

    <form ... onsubmit="return xSubmit(this);">
    
    <input type="submit" value="Login" />
    


    以下是一个例子 表格在jsfiddle上没有正确提交,但你明白了。
    http://jsfiddle.net/tYHs5/