2012-01-27 21 views
5

我有一個onSelect事件處理程序的日期選擇器。後來在我的程序中,我想添加其他onSelect處理程序。問題是,他們消滅了第一個。 (Fiddle。)如何將其他事件處理程序添加到jquery-ui datepicker實例?

如何添加額外的處理程序而不這樣做?

+1

似乎這已經問過:http://stackoverflow.com/q/2241725/1030169 – jmoerdyk 2012-01-27 17:08:46

+0

我認爲這將是,但沒有找到它,謝謝。 – sprugman 2012-01-27 17:16:27

回答

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

謝謝。當我看到上面的評論時,我剛剛完成了編碼。我認爲鏈接解決方案更優雅一些。更新:實際上,你的版本比我的更優雅。嗯... – sprugman 2012-01-27 17:48:53

+0

這種解決方案在幾種情況下工作正常(而不是鏈接的解決方案,如果在第一個處理程序中有一個變量來自第一個處理程序的上下文)。我在哪裏可以找到說明解決方案的文檔? 我無法理解,例如,參數變量。 – 2012-03-07 03:40:57

+0

'.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

相關問題