【问题标题】:How to add additional event handlers to a jquery-ui datepicker instance?如何向 jquery-ui datepicker 实例添加额外的事件处理程序?
【发布时间】:2012-01-27 16:51:19
【问题描述】:

我有一个带有 onSelect 事件处理程序的日期选择器。稍后在我的程序中,我想添加其他 onSelect 处理程序。问题是,他们消灭了第一个。 (Fiddle.)

如何在不这样做的情况下添加其他处理程序?

【问题讨论】:

标签: jquery jquery-ui events jquery-ui-datepicker


【解决方案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);
});

【讨论】:

  • 谢谢。当我看到上面的评论时,我刚刚完成了编码。我认为链接的解决方案更优雅一些。更新:实际上,你的版本比我的更优雅。嗯……
  • 此解决方案在多种情况下都可以正常工作(相反,如果在第一个处理程序中存在来自第一个处理程序上下文的变量,则链接解决方案将不起作用)。我在哪里可以找到解释我解决方案的文档?例如,我无法理解 arguments 变量。
  • .apply(this,arguments) 调用sinks[] 中的函数,确保this 在处理程序中是正确的。它还传递arguments 对象以传递onSelect 最初收到的所有参数(dateTextinst)。 developer.mozilla.org/en/JavaScript/Reference/…`
猜你喜欢
  • 2011-03-10
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2012-08-31
  • 2012-01-18
  • 2011-01-15
相关资源
最近更新 更多