31

jQueryダイアログオブジェクト内で使用される日付ピッカーがあります。ダイアログのコンテンツのソースは、 を使用してロードされ.load()ます。ダイアログ内で、テキスト入力用の日付ピッカーを作成するスクリプトを作成しました。

$("#date").datepicker({ ... });

ダイアログを初めて開いたとき - すべて問題ありませんが、閉じて再度開くと、日付ピッカーが自動的にトリガーされます (そのようなオプションautoOpen:falseはありません) これを防ぐ方法はありますか、それとも間違っていますか? ?

4

13 に答える 13

33

私が見つけたはるかに簡単な方法:

$("#dialogPopper").click(
                    function() {
                        $("#date").datepicker("disable");
                        $("#dialog").dialog("open");
                        $("#date").datepicker("enable");
                        return false;
                    }
                  );
于 2010-10-22T20:03:44.930 に答える
25

ダイアログの先頭に日付ピッカー フィールドを配置すると、自動的に開かれます。ダイアログの最初に非表示の入力を配置できます。

<input type="text" style="width: 0; height: 0; top: -100px; position: absolute;"/>
于 2010-11-22T21:29:50.607 に答える
15

私はこの正確な問題を抱えていて、tvanfosson のテクニックをわずかに変えるだけで解決しました。何らかの理由で、以下のように「クリック」イベントを日付ピッカー フィールドに手動で添付する必要がありました。

 $('#dialog').dialog({
 open: function(event, ui) {
    $(ui).find('#date').datepicker().click(function(){
        $(this).datepicker('show');
    });
 },
 close: function(event,ui) {
    $(ui).find('#date').datepicker('destroy');
 }});

(申し訳ありませんが、これを tvanfosson の投稿へのコメントとして投稿したかったのですが、必要な担当者がいません。)

于 2009-06-07T21:06:18.080 に答える
8

ダイアログの作成にスクリプトとして含めるのではなく、ダイアログを閉じたときに日付ピッカーを破棄し、ダイアログのオープンイベントハンドラーで作成することを検討することをお勧めします。

 $('#dialog').dialog({
     open: function(event, ui) {
        $(ui).find('#date').datepicker();
     },
     close: function(event,ui) {
        $(ui).find('#date').datepicker('destroy');
     }
 });

さまざまなイベント/メソッドを試して、本当にそれを再作成する必要があるかどうかを確認することもできますが、これでうまくいくと思います。

于 2009-05-31T16:58:15.317 に答える
5

理由は次のとおりです。モーダルフォーム内の最初のアイテムは日付ピッカーテキストフィールドであり、モーダルが起動されると、アクティブなコントロールは日付ピッカーを含むものです。

私は2つの代替ソリューションを見つけました:

  1. フィールドの順序を変更します。最初の場所にとどまるために、日付ピッカーを使用したものは避けてください。

  2. 別のコードで datepicker をフィールドに設定しないでください。ダイアログを開く関数内で設定してください ( openning の直後$("#dialog").dialog("open");)。

于 2012-10-30T16:50:28.567 に答える
4

ピッカーが自動的に開く理由は、ピッカーを初めて開いた後、入力フィールドがフォーカスされたままになるためです。

あなたはそれをぼかす必要があります:

$input.datepicker({
  onClose: function(dateText) {
    $(this).trigger('blur');
  }
});
于 2013-12-09T17:51:42.133 に答える
4

それは単なるダイアログフォーカスです: api.jqueryui.com/dialog/

ダイアログを開くと、次の条件に一致する最初の項目にフォーカスが自動的に移動します。

  1. autofocus 属性を持つダイアログ内の最初の要素
  2. ダイアログのコンテンツ内の最初の :tabbable 要素
  3. ダイアログのボタンペイン内の最初の :tabbable 要素
  4. ダイアログの閉じるボタン
  5. ダイアログ自体

autofocus解決策は、 以外のフィールドで属性を使用することですdatepicker

于 2016-04-13T19:45:01.520 に答える
2

私は同様の問題を抱えていました。jquery uiダイアログ内にjquery datepickerがあります。ダイアログを開いたときに、IE で日付ピッカーが自動的に開いていました。FirefoxやChromeではそうではありませんでした... $(document).ready の作成時に日付ピッカーを無効にすることで問題を修正しました。

$('.ConfirmMove #from').datepicker({
  duration: ''
}).datepicker('disable');

次に、この日付ピッカーを含むダイアログを開いたときに、ダイアログのオープンイベントハンドラーで有効にしました。

$(".ConfirmMove").dialog({
  close: function() { 
     $('.ConfirmMove #from').datepicker('disable'); 
  },
  open: function() {
     $('.ConfirmMove #from').datepicker('enable');
  }
});

また、ダイアログを閉じたときに無効に戻すことを忘れないでください。

このようにして、ダイアログを開いたり閉じたりするたびに日付ピッカーを破棄して再作成することもありません。

于 2010-01-26T14:57:50.807 に答える
1

これは私の問題を解決するために私がしたことです。

このコードは、ダイアログの作成にあります。

document.getElementById('date').disabled = true;
setTimeout('document.getElementById("date").disabled = false;', 100);

このようにして、ダイアログが開くと、別のコントロールにフォーカスが移ります。

少しの遅延でタイムアウトをテストできますが、私にとっては 100 で問題ありませんでした。

于 2012-08-15T19:12:34.987 に答える
0

これは古い質問であることは知っていますが、私にとってうまくいった解決策の1つは、カレンダーアイコンをトリガーすることでした:

$( ".date" ).datepicker({
  showOn: "button",
  buttonImage: "../css/imgs/calendar.gif",
  buttonImageOnly: true
});
于 2012-06-17T00:36:16.863 に答える
0

ソースコードから、ダイアログ内の要素のイベントをjQuery.Dialog常に追跡し、ダイアログがアクティブ状態になった後にその要素のイベントをトリガーすることがわかりました。この動作を防ぐには、フォーカスされている要素からのバブリング イベントの伝播を停止します。focusinfocus

$("#input").on("focusin", function (e) {
   return false; // or e.stopPropagation();
}).datepicker();
于 2015-05-05T07:36:59.477 に答える
0

なんらかの理由で、初期化子にアニメーション オプションを入力すると、カレンダーがこの動作を停止しました。

showAnim: ドロップ

于 2013-10-29T11:54:05.427 に答える