6

クラスの入力 [date_caisse] があります: datepicker-inline AND id: [date_caisse]

すべての Web ページでこの関数を初期化しています。

function InitEvents () {

$('.datepicker-inline').datepicker({

    showButtonPanel: true,  /*added by oussama*/
    changeMonth: true, /*added by oussama*/
    changeYear: true, /*added by oussama*/
    firstDay: 1,
    dateFormat: 'yy-mm-dd',/*'dd/mm/yy'*/
    onSelect: function (dateText, inst) {
        //alert('select!');
        id = $(this).attr('id');
        parts = id.split('-');
        id2 = parts[parts.length -1];
        $('#datepicker-target-id-' + id2).val(dateText);
    }
});

}

現在のページにのみ onSelect を適用したいので、これが私がしたことです:

$('#date_caisse').datepicker({

    onSelect: function (dateText, inst) {
        alert('select!');
    }
});

alert('select!');を入れたとき メインのjsファイル(すべてのページで呼び出されます)で動作します! しかし、現在のファイルを介してアクションをトリガーしようとすると、そうではありません。

おそらく、onSelect を 2 回呼び出すべきではありません。

だから、誰でも私を助けてくれますか?

良い一日をありがとう!

4

2 に答える 2

13

2 番目の関数を jquery 初期化ブロック内に配置しましたか? つまり、次のように見えるはずです

$(function(){
   $('#date_caisse').datepicker({
      onSelect: function (dateText, inst) {
         alert('select!');
      }
   });
});

編集:

はい、分かりました。datepicker が初めて初期化されると、元の dom 要素はhasDatepickerと呼ばれる新しいクラスの追加でマークされ、その後の初期化/再構成が防止されます。それを取り除くために私が見つけた方法は、日付ピッカーの構成を変更する前にそのマーカーを削除することです。したがって:

$(function() {
   $('#date_caisse').removeClass('hasDatepicker');
   $('#date_caisse').datepicker({
       onSelect: function(dateText, inst) {
           alert('overridden!');
       }
   });
});

試してみる!

于 2012-02-09T12:04:21.513 に答える
4

注:オプションを設定すると、日付ピッカーは要素の変更イベントを発生させませonSelect

要素のイベントに応答する必要がある場合はchange、設定時に変更イベントを自分で発生させることを覚えておく必要がありますonSelect()。例:

$(function(){
   $('#date_caisse').datepicker({
      onSelect: function (dateText, inst) {
         alert('select!');
         // Remember to fire the change event...
         if (inst.input) {
             inst.input.trigger('change');
         };
      }
   });
});

使用する代わりに、datepicker が発生onSelectするイベントにバインドすることもできます。dateSelected

于 2013-04-16T21:20:04.177 に答える