0

我的页面中有此代码

$("#ddlBirthdayDay,#ddlBirthdayMonth,#ddlBirthdayYear").change(function () {
    $("form").validate().element("#ddlBirthdayYear");
});

我需要将其更改为:我在三个输入中没有焦点$("#ddlBirthdayDay,#ddlBirthdayMonth,#ddlBirthdayYear"),我验证表单中的元素。

我怎样才能在 jquery 中做到这一点?

4

3 回答 3

1

如果所有元素都在同一个包装器中,则可以使用focusout.
http://api.jquery.com/focusout/

:focus选择器一起使用。
http://api.jquery.com/focus-selector/

var focusTimer = null;
$("form").on("focusout", function(){
  clearTimeout(focusTimer);
  focusTimer = setTimeout(function(){
    var focusedElements = $("#ddlBirthdayDay,#ddlBirthdayMonth,#ddlBirthdayYear").filter(':focus');
    alert(focusedElements.length);
  }, 50);
});

不幸的是,您需要设置超时,否则在输入字段中切换会导致错误结果。

jsfiddle 演示

于 2013-10-08T07:36:22.570 回答
0

您可以为每个元素添加一个属性,表示它失去了焦点。然后当所有元素都失去焦点时,为每个元素触发 validate 事件:

var $elems = $("#ddlBirthdayDay,#ddlBirthdayMonth,#ddlBirthdayYear");
$elems.blur(function () {
// Add a flag to this element to say it's lost focus
$(this).attr("data-blurred", "true");
console.log("blurred");
// If the number of elements in total equals the number with the blurred flag...
if($elems.filter("[data-blurred]").length === $elems.length) {
     // Iterate over all the original elements and fire the validate event
     $elems.each(function() {
         $("form").validate().element($(this));
     });
} 
});

这是一个小提琴

于 2013-10-08T07:32:11.193 回答
0

示例代码:

$(function(){
$('#a,#b,#c').on('blur',function(e){
    setTimeout(function(){
        if (!$('#a,#b,#c').is(':focus')) {
            alert('Lost focus on all controls');
        }
    }, 50);
});

});

看看我的演示:检测控件是否失去焦点

于 2013-10-08T08:20:10.663 回答