2016-10-03 54 views
2

我正在用phonegap创建一个应用程序,我正在验证使用jquery的表单客户端。如果没有连接,任何错误都会下降并像'snapchat'一样'覆盖'顶部的状态栏。不是第一个元素的第二个动画的调用promise函数?

为此,我在调用错误时隐藏状态栏,错误向下滑动并显示3秒钟,然后向上滑动。我想使用promise函数来等待直到错误再次出现之前再次显示状态栏,但我可以管理的所有内容都隐藏状态栏,并在错误消失后直接显示状态栏。

代码(J-查询):

function check_password() { 

    var password_length = $("#password_box").val().length; 

    if (password_length < 5) { 
    StatusBar.hide(); 
    $("#error_password").html("Password must be greater than 5 characters"); 
    $("#error_password").slideDown(); 
    $("#password_box").addClass('red_border'); 

    $(function() { 
      setTimeout(function() { 
      $("#error_password").slideUp('fast') 
      }, 3000); 

    }); 

    error_password = true; 

    } else{ 
    $("#error_password").hide(); 
    } 
} 

的CSS:

.error { 
    position: fixed; 
    color: white; 
    background-color:#a50d2e; 
    top:0; 
    left: 0; 
    width: 100%; 
    height: 3%; 
    text-align: center; 
    padding-top: 1%; 

} 
+0

为什么你不只是有一个叫做showError的var,默认是true。然后在你的函数开始时,如果(!showError)返回; showError = false;然后在你上一页之后,设置showError = true; – Keith

+0

'slideDown'和'slideUp'都有回调,并且都返回延迟,如果您向我们展示错误滑落后显示此状态栏的位置,也许我们可以帮助您 – adeneo

+0

我会将这些框的CSS代码在代码中。 验证的工作方式是默认隐藏的,直到有人输入某个内容并将其'重新输入到输入框中,然后检查它是否有效。如果不是,则显示错误消息 –

回答

1

下面是一个使用slideDown完成回调的例子:

$("#error_password").slideDown(function() { 
    // This function runs when the slideDown is complete 
}); 

另一种方法是用.promise(),其运行后,所有的匹配元素有额外的好处完成他们的动画(值得选择匹配多个元素时):

$("#error_password").slideDown().promise().then(function() { 
    // This function runs when the slideDown is complete 
}); 
+0

你是真正的MVP –

0

它并不完美或做它的最好的方式,但它是一个简短的修复,并可能有助于一些某些人场景。

如果有人对slideUp部分实际使用承诺有一个“适当”的方式,它仍然值得赞赏。

我所做的只是在第一个函数下面使用一个setTimeOut函数,该函数会在动画被调用时将动画延迟一段时间。

我将它延迟了3200ms而不是3000ms,因为这样可以使slideUp时间完成,并且状态栏看起来像它始终隐藏在错误的后面。

的jQuery:

setTimeout(function(){ 
     StatusBar.show(); 
}, 3200); 
相关问题