我基本上是在尝试进行表单验证。 Evertyhing工作正常。除了一件事。首先,这是我的代码:
$('#submit_btn').click(function(){
$("input:not([type=radio],[type=checkbox])").each(function() {
if ($(this).val() == ""){
$('#'+$(this).attr("name")+'_error').show("");
}
else{
$('#'+$(this).attr("name")+'_error').hide("normal");
}
});
if(!($("div[id$=error]").is(":visible")))
alert("a");
});
单击提交按钮后,它会检查不是单选按钮或复选框的输入。如果输入为空,则显示错误。
如果键入了某些输入,则会隐藏错误。
最后,我检查是否有任何错误信息,如果没有,我会提交表格。
我的问题是,我用一个带有.hide(“normal”)的小动画隐藏错误信息。所以我相信在隐藏最后一条错误消息的过程中,我的最后一条if语句会执行,并且它认为存在可见的错误消息(但是,它正处于隐藏的过程中)
如何在隐藏过程完成后执行我的if语句?
就我而言,如果没有留下任何错误消息,我会在再次点击提交按钮后收到提醒。
我希望我清楚我的问题。如果没有,我会尝试重写它。
谢谢!
答案 0 :(得分:5)
使用:visible
执行此操作有点hacky,而且肯定很慢。改为使用变量:
$('#submit_btn').click(function(){
var error = false;
$("input:not([type=radio],[type=checkbox])").each(function() {
if ($(this).val() == ""){
$('#'+$(this).attr("name")+'_error').show(400);
error = true;
}
else{
$('#'+$(this).attr("name")+'_error').hide(400);
}
});
if(error)
alert("a");
});
答案 1 :(得分:0)
如果您的目标是在.hide("normal")
函数完成动画后显示警告消息,那么您需要将“回调”函数作为参数传递给.hide()
函数。 See the documentation
请参阅此处的示例:
$('#submit_btn').click(function(){
$("input:not([type=radio],[type=checkbox])").each(function() {
if ($(this).val() == ""){
$('#'+$(this).attr("name")+'_error').show("");
}
else{
$('#'+$(this).attr("name")+'_error').hide("normal", function() {
// This function will be executed when the "normal" animation is complete
if(!($("div[id$=error]").is(":visible")))
alert("a");
});
}
});
});
我的2分...... 我会说,你可能想听听每个人的鼓励,寻求一个优雅的表单验证插件。