我有一個onSelect事件處理程序的日期選擇器。後來在我的程序中,我想添加其他onSelect處理程序。問題是,他們消滅了第一個。 (Fiddle。)如何將其他事件處理程序添加到jquery-ui datepicker實例?
如何添加額外的處理程序而不這樣做?
我有一個onSelect事件處理程序的日期選擇器。後來在我的程序中,我想添加其他onSelect處理程序。問題是,他們消滅了第一個。 (Fiddle。)如何將其他事件處理程序添加到jquery-ui datepicker實例?
如何添加額外的處理程序而不這樣做?
你可以在數組中維護你想要的調用;
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);
});
謝謝。當我看到上面的評論時,我剛剛完成了編碼。我認爲鏈接解決方案更優雅一些。更新:實際上,你的版本比我的更優雅。嗯... – sprugman 2012-01-27 17:48:53
這種解決方案在幾種情況下工作正常(而不是鏈接的解決方案,如果在第一個處理程序中有一個變量來自第一個處理程序的上下文)。我在哪裏可以找到說明解決方案的文檔? 我無法理解,例如,參數變量。 – 2012-03-07 03:40:57
'.apply(this,arguments)'調用'sinks []'中的函數,確保處理程序中的this是正確的。它還傳遞'arguments'對象來傳遞'onSelect'最初收到的所有參數('dateText'&'inst')。 https://開頭developer.mozilla.org/EN/JavaScript的/參考/ Functions_and_function_scope/arguments' – 2012-03-07 10:19:28
似乎這已經問過:http://stackoverflow.com/q/2241725/1030169 – jmoerdyk 2012-01-27 17:08:46
我認爲這將是,但沒有找到它,謝謝。 – sprugman 2012-01-27 17:16:27