Как добавить дополнительные обработчики событий в экземпляр jquery-ui datepicker?

У меня есть средство выбора даты с обработчиком событий onSelect. Позже в моей программе я хочу добавить другие обработчики onSelect. Проблема в том, что они уничтожают первый. (Fiddle.)

Как я могу добавить дополнительные обработчики, не делая этого?


person sprugman    schedule 27.01.2012    source источник
comment
Кажется, об этом уже спрашивали: stackoverflow.com/q/2241725/1030169   -  person jmoerdyk    schedule 27.01.2012
comment
Думал будет, но не нашел, спасибо.   -  person sprugman    schedule 27.01.2012


Ответы (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);
});
person Alex K.    schedule 27.01.2012
comment
Спасибо. Я только что закончил кодировать это, когда увидел комментарий выше. Я думаю, что связанное решение немного более элегантно. Обновление: на самом деле ваша версия более элегантна, чем моя. Хм... - person sprugman; 27.01.2012
comment
Это решение отлично работает в нескольких ситуациях (вместо этого связанное решение не работает, если в первом обработчике есть переменная, которая исходит из контекста первого обработчика). Где я могу найти документацию, которая объясняет мне решение? Я не могу понять, например, переменную arguments. - person Giovanni Bitliner; 07.03.2012
comment
.apply(this,arguments) вызывает функцию в sinks[], проверяя правильность this в обработчике. Он также передает объект arguments для передачи всех аргументов, которые onSelect первоначально получил (dateText и inst). developer.mozilla.org/en/JavaScript/Reference/` - person Alex K.; 07.03.2012