2014-09-24 44 views
2

我正在使用jquery-ui datepicker作为我的一个输入。如果用户输入模糊,我会显示相关消息(例如“此字段是必需的”)。为了这个目的,我有以下的jQuery的,这可以用于简单<select><input type="text">标签完美的罚款:如何在输入模糊后调用函数?

$("input").blur(function(){ 
    if($(this).val()=="") 
     $(this).next().text("This field is required."); 
    else 
     $(this).next().text(""); 
}); 

然而,在日期选择器的情况下(我必须基本上模糊选择日期)的错误消息得到显示即使在后我选择了日期(即选择日期导致模糊事件)。这就要求在模糊事件完成(不同时)之后.blur(function(){});应该被称为

如何解决这种情况?

这是DEMO

+2

这样的 - > ** HTTP://jsfiddle.net/D4AGz/98/** – adeneo 2014-09-24 17:25:10

+0

还是这个 - http://jsfiddle.net/D4AGz/99/尽管'adeneo'的建议要好得多! – Leron 2014-09-24 17:26:06

+0

@adeneo是的!这正是我想要的! – 2014-09-24 17:39:48

回答

3

您可以添加您的验证检查的日期选择器的OnClose事件,而不是模糊事件输入字段:

$("#datepicker").datepicker({onClose: function(selectedDate) { 
    if(!selectedDate) {  
     $(this).next().text("This field is required."); 
    } 
}}); 
+0

谢谢!那很完美! :) – 2014-09-24 17:33:56

+0

将是非常有用的,如果你能告诉我如何明确呼叫日期的关闭功能:) – 2014-09-24 18:10:28

+0

将是真正有用的,如果你能告诉我如何从另一个函数显式调用onClose :) – 2014-09-24 18:23:42

0

一个黑客攻击的一种,但你可能只是延迟与setTimeout检查:

$("input").blur(function() { 
    var $t = $(this); 
    setTimeout(function() { 
     if ($t.val() == "") $t.next().text("This field is required."); 
     else $t.next().text(""); 
    }, 100); 
}); 

http://jsfiddle.net/D4AGz/96/

+0

想到了这一点,但这会导致每个其他输入的setTimeout(),这不是我所期待的。 – 2014-09-24 17:26:18

+0

也我不想单独处理这个输入。 – 2014-09-24 17:27:29

+0

你将不得不比霰弹枪'$(“输入”)'选择器更精致一点,并使用自定义的datepicker事件。 – Malk 2014-09-24 17:30:42