【问题标题】:How to call a function AFTER blur from input?如何在输入模糊后调用函数?
【发布时间】:2014-09-24 17:18:10
【问题描述】:

我使用 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("");
});

但是,如果是 datepicker(我必须基本上 模糊 选择一个日期),即使在之后也会显示错误消息'已经选择了日期(即选择日期会导致模糊事件)。这要求应该在模糊事件完成后(而不是同时)调用.blur(function(){});

如何解决这种情况?

这是DEMO

【问题讨论】:

标签: javascript jquery jquery-ui datepicker


【解决方案1】:

您可以将验证检查添加到 datepicker 的 onClose 事件,而不是输入字段的 blur 事件:

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

【讨论】:

  • 如果你能告诉我如何明确地调用日期的关闭函数将会非常有帮助:)
  • 如果你能告诉我如何从另一个函数显式调用 onClose 将会非常有帮助:)
【解决方案2】:

有点骇人听闻,但您可以使用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/

【讨论】:

  • 想到了,但这会导致 setTimeout() 用于其他所有输入,这不是我想要的。
  • 我也不想单独为这个输入单独的处理程序。
  • 你必须比霰弹枪更精致一点 $("input") 选择器并使用自定义日期选择器事件。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
相关资源
最近更新 更多