6

Ten problem dotyczy , nad czym testuję i nie ma wpływu na moje obecne wersje Firefox or Chrome.Osierocone jQuery Datepicker pojawia się ponownie podczas nawigacji z powrotem do strony w IE10

Kroki prowadzące do odtworzenia w programie Internet Explorer

  1. Przejdź do: http://jqueryui.com/datepicker/
  2. Kliknij pole daty, aby wyświetlić datepicker
  3. Podczas gdy jest otwarty, przejdź do innego okna aplikacji wzdłuż boku okna IE a następnie z powrotem do IE i kliknij puste puste miejsce w panelu datepicker.
  4. Powinieneś zobaczyć, że datepicker znika, a następnie pojawia się ponownie, co, jak sądzę, musi odnosić się do faktu, że kontrola, na której ostatnio się skupił, odzyskuje ostrość po kliknięciu.

Co zauważyłem:

  • Jeśli minimalizacji i maksymalizacji IE, że nie nastąpi to
  • Jeśli wykonać te same czynności, bez klikania do innej aplikacji i klikając bezpośrednio na biała przestrzeń, to się nie zdarza
  • Działa konsekwentnie, jeśli masz okna/aplikacje obok siebie lub na 2 monitorach

Chociaż mogę zgodzić się, że jest to niewielki problem i nie wygląda na błąd, w naszej aplikacji staje się on bardziej problematyczny, ponieważ datepicker jest wyświetlany jako część wyskakującego okienka, które znika po kliknięciu to.

Date Picker z rodzicami w opakowaniu:

date picker with container

Osierocony Date Picker pojawi się ponownie:

orphaned date picker

Co próbowałem:

widziałem stanowisk odnoszących się do widoczności datepicker które sugerują poniżej, które mam przetestowane:

$("#my-datepicker-div").datepicker('destroy'); 
$("#my-datepicker-div").datepicker('disable'); 

chociaż jestem zadowolony zignorować ten przypadek krawędzi, to został podniesiony jako błąd które muszę naprawić. Po prostu nie jestem pewien, co jeszcze spróbować.

Odpowiedz

4

udało mi się naprawić w IE 10 (mają go odświeżyć wtedy blisko, więc ma trochę migotania) pod numerem:

$("#datepicker").datepicker("hide"); 

w funkcji, która jest wywoływana, gdy zamyka div (w tym szybki przykład kliknięcia poza div po powrocie do okna).Przykładowe skrzypce tutaj: http://jsfiddle.net/anyuG/

Aby odtworzyć zachowanie, które opisujesz w IE 10, po prostu skomentuj tę linię w funkcji disablepopup() i możesz odtworzyć osierocone okno datepaksu. Jeśli umieścisz swój faktyczny przykład jako skrzypce, możemy z tym pracować.

Wzięłam przykład popup div tutaj: http://istockphp.com/jquery/creating-popup-div-with-jquery/

UPDATE

inny sposób sobie z tym poradzić, i wygląda trochę ładniejszy jest zapewnienie użytkownikowi funkcji $(window).blur() i $(window).focus(). To wygląda dobrze moim zdaniem, należy zwrócić uwagę na ścisły na urlopie okna, i ponownie po kliknięciu w białym polu, i ponownie, ale wszystkie blisko siebie, jeśli klikniesz poza białym polu:

$(window).blur(function(e) { 
    $("#datepicker").datepicker("hide"); 
}); 

Aktualizacja skrzypce. Zagraj także z .focus(), aby określić najlepsze kombinacje dla swoich preferencji, a powinieneś być dobry. Ponadto może chcieć wykryć tylko IE 10 i uruchomić ten kod tylko w tej przeglądarce.

Fiddle: http://jsfiddle.net/78252/1/

+0

Dzięki za skrzypce, to odtwarza poprawnie problem gdy linia wykomentowane. Podczas gdy twoje rozwiązanie zamyka datepicker, to po prostu nie ma racji, gdy flashuje się, zanim się zamknie. – Tanner

+0

Zgoda, nie jestem pewien, czy mam lepsze rozwiązanie, ponieważ miga w ogóle, ponieważ mówi coś o zachowaniu strony (kolejności zdarzeń). – Matthew

+0

Pomyślałem o tym jeszcze trochę. Zobacz zaktualizowaną odpowiedź. – Matthew

Powiązane problemy