2011-10-31 20 views
33

Mam okno dialogowe jquery ui z zakładkami ładowanymi dynamicznie/JSON z zawartością. Ze względu na złożoność nie mogę tak naprawdę opublikować skrzypiec lub odpowiedniego kodu (zbyt wiele kodu).Usunąć fokus programowo?

Co się dzieje, gdy po otwarciu okna dialogowego można przechodzić przez elementy w oknie dialogowym, aż do pierwszej karty. Potem nie możesz przejść do żadnego innego miejsca. Fokus jest zablokowany na tej karcie, nawet jeśli klikniesz gdzie indziej, że fokus jest zablokowany na tej karcie.

Nie mogę znaleźć rzeczywistej przyczyny tego problemu.

W jaki sposób programowo usunąłem fokus?

+0

Z jakiej przeglądarki korzystasz? W IE czasami tracisz ostrość bez żadnego powodu. – Hossein

+0

Czy zdarzenie keypress dla TAB zostało nadpisane, aby ręcznie zarządzać przełączaniem ostrości (jak można zrobić przy wyświetlaniu modalnych okien dialogowych)? –

+0

Jedyne miejsce, w którym widzę zdarzenie keypress, to funkcja keydown, aby móc trafić strzałką w dół do zawartości karty. I to jest we wszystkich przeglądarkach. – Jason

Odpowiedz

55

To może pomóc ...

http://api.jquery.com/blur/

$('#tabName').blur(); 
+1

To jest poprawna odpowiedź, jednak nie wyjaśniłem wyraźnie mojej sytuacji. Odpowiednio zaktualizuję. dzięki. – Jason

+3

To działa świetnie i rozwiązało podobny problem, jaki miałem. Jedna szybka zmiana, którą polecam, jeśli używasz jQuery i musisz zastosować to ogólnie do zakresu zdarzeń, możesz zrobić coś takiego: '$ (document.activeElement) .blur()' - wszystko co jest aktywne straci fokus w momencie zdarzenia. – Markus

+2

Jak zrobić to z czystym JavaScript? – AmerllicA

0

Wprowadziłbym ładunek alertów, aby znaleźć miejsce, w którym zawodzi JS. Na przykład.

alert(1); 
var a = 10; 
alert(2); 
var b = null; 
alert(3); 
a += 5; 
alert(4); 
b.hello(); 
alert(5); 

Oczywiście w tym przykładzie ostatni alert będzie 4.

Nie jest to miłe podejście, ale każdy musi to zrobić w pewnym momencie.

+9

Alert nie jest właściwym sposobem debugowania, szczególnie jeśli reaguje na ruchy kursora myszy, hover lub podobne zdarzenia. Prawie każda przeglądarka ma obecnie konsolę debugowania, do której można pisać za pomocą 'console.log (...);' – ThiefMaster

+6

Właściwym sposobem debugowania jest to, co pomaga wyśledzić błąd w najbardziej efektywny sposób. Alerty mają bardzo przydatną rolę w debugowaniu, ponieważ wstrzymują wykonywanie. Właśnie wczoraj debugowałem uciążliwą animację jQuery i 'console.log()' było bezużyteczne do wskazywania skąd pochodzi ten wizualny błąd, ponieważ stało się tak szybko. Dodanie ostrzeżeń zatrzymało animację na każdym kroku i pozwoliło mi znaleźć dokładnie, skąd pochodzi usterka. Masz rację, że metoda OPs nie jest właściwa, a 'console.log()' jest w tym przypadku lepsza, ale 'alert()' ma miejsce w debugowaniu. – Gavin

+1

@Gavin i reszta. Lepiej wtedy użyć polecenia 'debugger' (przynajmniej w przeglądarkach, które go obsługują). Przerywa wykonywanie, ale nadal pozwala używać narzędzi programistycznych do sprawdzania, co się dzieje. Dzięki alarmowi otrzymujesz jedynie wizualną migawkę bieżącego stanu, co nie zawsze pomaga. – stafffan

2

Spróbuj wywołując blur wydarzenie w dziedzinie chcesz stracić ostrość.