2012-03-23 6 views
1

jQuery UI datepickerで予期しない動作が発生しました。jQueryのUI datepickerは、日付にフォーマットが含まれていない場合、以前に選択した日付には開きません。

曜日が含まれないフォーマットを使用する場合はいつでも、 'MM yy'(2011年10月)、 次回に表示されるdatepickerは、前回の日付ではなく今日を指します。

これは、フォーマットが使用されている場合などは発生しません。 'dd/mm/yy'(2011年1月10日)。

これは実際にはバグかもしれないと私はそれをjQuery UIコミュニティに報告します。

とにかく、その間にこれまでにこの問題に直面していて、回避策を提案できますか

Example presenting the problem can be found here.

EDIT:完全性については :私はバグとしてjQueryのUIのコミュニティにこの問題を提出しました。 For those interested it could be found here.

答えて

3

あなたが正しいとマークした回答は、実際には正しくありません。私はそれを分解してみましょう。あなたがclickイベントあなたのコントロールが非常に悪いですfocusに入るたびに、結着ている$("#monthDate1").focusこれにより

$("#monthDate1").focus(function() { 
    $(".ui-datepicker-calendar").hide(); 
    //add event to perform on done button click 
    $(".ui-datepicker-close").click(function(){ 
     var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); 
     var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); 
     $("#monthDate1").datepicker('option', 'defaultDate', new Date(year, month, 1)); 
     $("#monthDate1").datepicker('setDate', new Date(year, month, 1)); 
    }); 
}); 

$(".ui-datepicker-close")clickの度に$.ajaxを起動することを検討してください。あなたの機能はサーバから一度だけ要求するつもりですが、あなたのコントロールがfocusに入った回数だけ要求します。

修正:

$("#monthDate1")focusを結合するが、代わりに(i`m間違えない場合はjQueryのバージョンの> = 1.9.3)liveまたはdelegateを使用しないでください。ここで

liveと例です。ここで

​​

delegateと例です。

$("#ui-datepicker-div").delegate(".ui-datepicker-close", 'click', function(){ 
    var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); 
    var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); 
    $("#monthDate1").datepicker('option', 'defaultDate', new Date(year, month, 1)); 
    $("#monthDate1").datepicker('setDate', new Date(year, month, 1)); 
}); 

UPDATE

このアップデートは、私は私のコメントに与えた応答になります。 focusイベントの中では、ユーザにとってはあまりよくないので、$(".ui-datepicker-calendar").hide();というイベントはありません。ここで

あなたは問題なくそれを行うべきかです:

var dynamicStyle = $("<style> .ui-datepicker-calendar { display: none; } </style>") 
         .attr("id", "dynamicDatepickerStyle"); 
$("#monthDate1").datepicker({ 
    beforeShow: function() 
    { 
     $("body").append(dynamicStyle); 
    }, 

    onClose: function() 
    { 
     $("#dynamicDatepickerStyle").remove(); 
    } 
}); 

これはあなたopendatepickerdatepickerがで閉じているときstyleremoveますcalendarhideますstyleを追加しようとしていますページ上の他の日付ピッカーには影響しません。これは、ページ上に複数の日付ピッカーを持ちたい場合は、calendarとそれ以外のものもあります。

+0

このコメントをいただきありがとうございます。私は 'live()'または1.7以上のバージョンのjQuery 'on()'メソッド(+1)の使用に同意します。私はあなたがすべての焦点の使用に同意しないことを読んでいます。したがって、私のケースでは必須である '.ui-datepicker-calendar'をどうやって隠すのか分かりませんので、実際の例を提供できるかどうか、私は非常に感謝しています。 – Boro

+0

'$(" .ui-datepicker-calendar ")。hide();'この関数は、この日付ピッカーがカレンダーを表示しないようにする場合にのみ使用します。 それとも、グローバルにオーバーライドするが、あなたはそれを読み込むところ、このサイト内のすべてのdatepickersに影響を与えることを認識することができます ' ' それともあなたはこのようにそれを必要とするページ上のスタイルを注入できます ' $( 'some_container')( '' を追加。 ); ' – alexo

+0

それを明確にしてくれてありがとう。 – Boro

4

私はあなたの問題を解決しました。このリンクをチェックアウトしてくださいhttp://jsfiddle.net/nEGTv/3/

$("#monthDate1").focus機能の$("#monthDate1").datepicker('option', 'defaultDate', new Date(year, month, 1));コードにこの行を追加してください。

+2

大変ありがとうございました。私はそれを実現する方法が必要だと思っていました。良い仕事+1と受け入れる:) – Boro

関連する問題