2013-04-20 14 views
5

Mam dwa elementy input, które działają jako znaczniki dat jQuery UI. Po dokonaniu selekcji na pierwszym elemencie datepicker powinien on automatycznie skupić się na drugim elemencie datepicker i pokazać kalendarz, umożliwiając łatwe i szybkie dokonanie wyboru.jQuery UI Datepicker - Dlaczego drugi datepicker przestaje się świecić?

Z jakiegoś powodu drugi datepicker/kalendarz pojawia się na chwilę, a następnie znika. Nie jestem pewien, dlaczego znika; Czy ktoś może zaoferować mi wyjaśnienie, dlaczego znika i możliwe rozwiązanie?

Obecnie wykorzystaniem następujących bibliotek: jQuery 1.8.3, jQuery UI 1.9.2

Oto kod Obecnie używam:

<ul class="fields"> 
    <li><label>Date picker #1</label> 
     <input type="text" class="date-picker-1" /> 
    </li> 
    <li><label> Date picker #2</label> 
     <input type="text" class="date-picker-2" /> 
    </li> 
</ul> 

$('input.date-picker-1').datepicker({ 
    constrainInput: true, 
    hideIfNoPrevNext: true, 
    onSelect: function() { 
     $(this).closest('.fields') 
      .find('.date-picker-2').datepicker('show'); 
    } 
}); 

$('input.date-picker-2').datepicker({ 
    onFocus: 'show' 
}); 

Oto skrzypce: http://jsfiddle.net/B78JJ/

Jeżeli którykolwiek inne informacje byłyby pomocne, proszę pytać, a ja z przyjemnością pomogę.

Odpowiedz

4

Wydaje problem ostrości synchronizacji, szybkie obejście jest użycie niewielkiej timeout:

$('input.date-picker-1').datepicker({ 
    constrainInput: true, 
    hideIfNoPrevNext: true, 
    onSelect: function() { 
     var dees = $(this); 
     setTimeout(function() { 
      dees.closest('.fields').find('.date-picker-2').datepicker('show'); 
     }, 100); 
    } 
}); 

Zobacz working fiddle

+0

To działało w IE, Chrome, Firefox i Safari dla mnie. Dzięki Nelson. Czy wiesz, czy jest to częsty problem z '' fokus' zdarzeń? –

+1

To prawdopodobnie jakaś bug/skrzynka w kodzie jquery-ui datepicker, wymagałoby poświęcić trochę czasu na debugowanie datepicker, aby znaleźć dokładny błąd, więc jeśli nie chcesz tracić czasu na to, to obejście limitu czasu jest prosta droga do przodu. – Nelson

+0

To jest to, co zamierzam użyć. Poświęcę trochę czasu, próbując znaleźć błąd, ale na razie muszę dotrzymać terminów! Dzięki za rozwiązanie. –

0

powodu tego

$(this).closest('.fields') 
      .find('.date-picker-2').datepicker('show'); 

można użyć

window.setTimeout(function(){ 
      $('.date-picker-2').datepicker('show'); 
     }, 1); 
+0

Dlaczego ten konkretny kod powoduje problem? –

+0

musimy otworzyć to po pewnym czasie – PSR

+0

jest afocus timing issue – PSR