2012-01-27 45 views
5

私はonSelectイベントハンドラを持つdatepickerを持っています。私のプログラムの後半で、他のonSelectハンドラを追加したいと思います。問題は、最初のものを拭き取ることです。 (Fiddle。)jquery-ui datepickerインスタンスに追加のイベントハンドラを追加するには?

どうすればいいですか?

+1

これは前に頼まれているようだ。http://stackoverflow.com/q/2241725/1030169 – jmoerdyk

+0

私はそれが可能だろうと思ったが、それを見つけることができませんでした、ありがとう。 – sprugman

答えて

1

アレイ内で希望のコールを維持できます。

var firstHandler = function(dateText, inst) { 
    console.log('Original Handler', dateText, inst); 
}; 

var secondHandler = function(dateText, inst) { 
    console.log('Second Handler', dateText, inst); 
}; 

$('#datepicker').datepicker({ 
    onSelect: function() { 
     var sinks = $(this).data("mySelects"); 
     for (var i = 0; i < sinks.length; i++) 
      sinks[i].apply(this, arguments); 
    } 
}).data("mySelects", [firstHandler]); 

$('#addBtn').click(function(event) { 
    $('#datepicker').data('mySelects').push(secondHandler); 
    $('#datepicker').data('mySelects').push(nthHandler); 
}); 
+0

ありがとうございます。私はちょうど私が上記のコメントを見たときにコーディングを終了した。私は、リンクされたソリューションは少しエレガントだと思う。アップデート:実際には、あなたのバージョンは私のものよりもエレガントです。 Hmm ... – sprugman

+0

このソリューションはいくつかの状況でうまくいきます(最初のハンドラでは、最初のハンドラのコンテキストから出てくる変数がある場合、リンクされたソリューションは機能しません)。私に解決策を説明するドキュメントはどこにありますか? 例えば、arguments変数を理解できません。 –

+0

'.apply(this、arguments)'は 'sinks []'で関数を呼び出し、 'this'がハンドラ内で正しいことを確認します。 'onSelect'が元々受け取った全ての引数(' dateText'と 'inst')を渡すために' arguments'オブジェクトも渡します。 https:// developer.mozilla.org/ja/JavaScript/Reference/Functions_and_function_scope/arguments' –

関連する問題