2013-04-11 75 views
1

我建立一个自定义联系人窗体。我所有的输入字段都有一个mouseenter/mouseleave和focus/blur动画(背景色)。我的问题与模糊()和焦点()。 下面是名称字段代码:)输入字段具有模糊的()和焦点()

  • nameInvalidation(:

    $('#userName').on('mouseenter', function(){ 
        if($.trim($(this).val()) == ""){ 
        $('#userName').animate({'background-color':'#FECC00'}, 200); 
        } 
        }); 
    
        $('#userName').on('mouseleave', function(){ 
        if($.trim($(this).val()) == ""){ 
         $(this).stop(true).animate({'background-color':'#ffffff'}, 200); 
        } 
        }); 
    
        $('#userName').focus(function(){ 
        $(this).animate({'background-color':'#B0CB1F'}, 200); 
    
        }); 
    
        $('#userName').blur(function(){ 
        $(this).animate({'background-color':'#ffffff'}, 200); 
        if($.trim($(this).val()) == ""){ 
         nameInvalidation(); 
        } 
        else{ 
         nameValidation(); 
        } 
        }); 
    

    的nameInvalidation()和nameInvalidation()有一些动画对号变灰勾选 - 输入字段需要填充 - 这是所有输入字段的默认值;

  • nameValidation():绿色的勾号 - 场数据已准备好被发送;

当我输入输入字段并且什么都不做时,nameInvalidation()运行;当我输入nameValidation()运行的内容时 - 我知道该字段是否准备好。 问题是这样的:

  • ,如果我进入提交的输入,它是空的
  • 如果,如果我离开它空
  • 如果我写的东西,但在离开输入字段
之前将其删除

...比nameInvalidation()动画是不是想运行,因为它已经默认。

用于当现场的一些数据,我在它得到同样的事情,改变或见好就收......绿色的勾号再次运行。

我尝试使用KEYUP()和它的工作在一定程度上却运行在每次击键勾选动画 - 我只希望当我离开现场。

这里有一个Fiddle

佩德罗

回答

0

创建持有调用方法的当前状态

检查modified jsfiddle

var currentValidationMethodMane; 
    function nameValidation(){ 
     if(currentValidationMethodMane == "nameValidation"){ 
      return; 
     } 
     currentValidationMethodMane = "nameValidation"; 
    ......... 

function nameInvalidation(){ 
     if(currentValidationMethodMane == "nameInvalidation"){ 
     return; 
    } 
    currentValidationMethodMane = "nameInvalidation"; 

..... 
+0

简单有效的变量 - 伟大工程!只有一件小事:*第一次*我们在输入栏内单击并离开,它为灰色复选标记注入动画。之后,一切都完美无瑕。你能做点什么吗? – Pedro 2013-04-12 08:33:22