Mam dwa wejścia, które razem tworzą pojedynczą jednostkę semantyczną (pomyśl o godzinach i minutach wejściowych razem tworząc wejście czasowe). Jeśli oba wejścia tracą ostrość, chcę zadzwonić do funkcji JavaScript, ale jeśli użytkownik skakuje jedynie między tymi dwoma, nie chcę niczego wywołuje.

Próbowałem owijać te dwa wejścia w div i dodając onble do div, ale nigdy nie wyzwala.

Następnie wypróbowałem dodawanie Wjeździów do obu wejść i sprawdzają je instalację: Atrybut fokusowy przez jQuery, ale wydaje się, że gdy onblur wyzwala się kolejny element jeszcze nie otrzymał ostrości.

Jakieś sugestie, jak to osiągnąć?

Edytuj: Ktoś zapytał o to cel. Chciałbym zaktualizować kilka innych pól w oparciu o wartości zawartych przez obu tych wejść, ale idealnie nie chcę aktualizować innych pól, jeśli użytkownik jest nadal w procesie aktualizacji drugiego wejścia (na przykład, jeśli jest Karty użytkownika od pierwszego do drugiego wejścia).

5
Zecrates 9 listopad 2011, 18:47

3 odpowiedzi

Najlepsza odpowiedź
var focus = 0;
$(inputs).focus(function() { focus++ });
$(inputs).blur(function() {
    focus--;
    setTimeout(function() {
        if (!focus) {
            // both lost focus
        }
    }, 50);
});
2
lanzz 9 listopad 2011, 14:53

Przykład roboczy tutaj: http://jsfiddle.net/bs38v/5/

Używa tego:

$('#t1, #t2').blur(function(){
setTimeout(function(){
    if(!$('#t1, #t2').is(':focus')){
        alert('all good');
    }
},10);
});
3
AndersDaniel 9 listopad 2011, 15:01

Jaki jest cel tego zachowania? Wydarzenie rozmycia wyzwalacze, gdy pole traci ostrość, a tylko jedno pole może uzyskać ostrość na raz.

Co można zrobić, w przypadku walidacji na przykład, ma zastosowanie tej samej funkcji na rozmycie zarówno dla obu pól, jak i sprawdzić wartości pól całkowicie.

Bez kontekstu trudno ci pomóc więcej.

Re.

0
Didier Ghys 9 listopad 2011, 14:52