2013-04-20 72 views
5

我有两个input元素作为jQuery UI日期选择器。在第一个datepicker元素上进行选择后,它应该自动将焦点放在第二个datepicker元素上并显示日历,以便您轻松快速地进行选择。jQuery UI Datepicker - 为什么第二个datepicker消失onfocus?

无论出于何种原因,第二个日期选择器/日历显示一会儿然后消失。我不确定它为什么会消失;任何人都可以给我一个解释,为什么它正在消失,并有可能的解决方案?

目前利用以下库:jQuery的1.8.3,jQuery UI的1.9.2

这里是我目前使用的代码:

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

这里有一个小提琴:http://jsfiddle.net/B78JJ/

如果任何其他信息将有所帮助,请随时问,我很乐意提供帮助。

回答

4

这似乎是一个重点计时问题,快速解决方法是使用一个小的超时:

$('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); 
    } 
}); 

working fiddle

+0

这对IE,Chrome,Firefox和Safari适用于我。谢谢尼尔森。你知道这是“聚焦”事件的常见问题吗? – 2013-04-20 16:59:41

+1

这可能是jquery-ui datepicker代码中的一些bug/corner情况,它需要花费一些时间来调试datepicker才能找到确切的bug,所以如果你不想花时间在那,那么超时解决方法是轻松的前进方向。 – Nelson 2013-04-20 17:07:28

+0

这就是我要继续使用。我会在一段时间内尝试找出错误,但现在必须赶上截止日期!感谢您的解决方案。 – 2013-04-20 17:11:05

0

因为这

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

,你可以用

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

为什么会该特定的代码导致问题? – 2013-04-20 16:56:02

+0

我们需要在一段时间后打开它 – PSR 2013-04-20 16:56:45

+0

它是焦点时间问题 – PSR 2013-04-20 17:00:39