2013-10-08 34 views
0

我有這樣的代碼在我的網頁引發LostFocus在3種元素的jQuery

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

我需要將其更改爲:我還沒有在這三個輸入$("#ddlBirthdayDay,#ddlBirthdayMonth,#ddlBirthdayYear")關注的焦點,我驗證表單元素。

我該如何做到這一點在jQuery中?

+0

要處理兩種變化和失去焦點的事件,不是嗎? – RyanB

回答

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 Demo

+0

我的需要是檢測到我失去了在這3個元素焦點和焦點是在這3個元素之外 – user1428798

+0

請看看我更新的答案。 – jantimon

0

您可以爲每個元素添加一個屬性來表示它失去了焦點。然後,當所有元素都失去了重心,火爲每個驗證事件:

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)); 
    }); 
} 
}); 

Here is a fiddle

+0

當我失去了三個元素之一的焦點時,模糊會激發,我需要驗證當我失去了3個元素的焦點(當我走出這個3個輸入的形式)。 – user1428798

+0

@ user1428798最後回答 – CodingIntrigue

+0

$ elems.find(「[data-blurred]」)。length is always = 0 – user1428798

0

樣品的編號:

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

});

在我的演示看看:Detect if controls lost focus