2011-01-21 45 views
3

我基本上试图做一个表单验证。 Evertyhing工作正常。除了一件事。首先,这里是我的代码:jQuery隐藏元素和isVisible问题

 $('#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语句隐藏进程完成后?

在我的情况下,当没有错误信息时,我会在另一次点击提交按钮后得到警报。

我希望我清楚我的问题。如果没有,我会尝试重写它。

谢谢!

+1

以另一种方式,我建议你尝试一下jQuery的验证插件,而不是自己编写整个解决方案。试试这个,最流行的用jQuery进行验证:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ – mdrg

回答

5

这样做与:visible是有点哈克,肯定很慢。如果你的目标是展示.hide("normal")函数执行完毕后,动画,那么你需要传递一个“回调”函数作为参数传递给.hide()功能警报消息

$('#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

同意。另外,我相信“正常”不再被正式支持 - 如果jQuery UI包含在同一页面上,它将会中断。请参阅:http://stackoverflow.com/questions/2578204/jquery-1-4-2-is-foo-hidenormal-broken-or-am-i-crazy – karim79

+0

我刚刚建议同样的事情。最好使用代码中已有的数据,而不是试图从前面代码的副作用中重新创建数据。 – Guffa

+0

@ karim谢谢:我已经放了一段时间。 – lonesomeday

0

:使用一个变量,而不是。 See the documentation

在这里看到一个例子:

​​

我的2美分... 我会说虽然,你可能想听听大家的鼓励,寻求一个优雅的形式验证插件。