Вам нужно подключиться к событию onChange
во всплывающем календаре, а не DateTextBox
.Проблема заключается в том, что каждый раз, когда вы открываете календарь, DateTextBox
уничтожает ранее показанный экземпляр и создает новый экземпляр dijit.Calendar
(на который ссылается свойство DateTextBox.dropDown
).
Поэтому вам необходимо подключиться к методу DateTextBox.openDropDown()
, чтобысоздать соединение с DateTextBox.dropDown.onChange()
, то есть Calendar.onChange()
:
var dateBox = dijit.byId("dateBox");
var eventHandle;
dojo.connect(dateBox, "onChange", function(value) {
// fires only if clicked date changed
console.log('onChange');
});
dojo.connect(dateBox, "openDropDown", function() {
eventHandle = dojo.connect(dateBox.dropDown, "onChange", function(value) {
// fires every time date is clicked
console.log(value.toString());
});
});
dojo.connect(dateBox, "closeDropDown", function() {
dojo.disconnect(eventHandle);
});
См. этот пример в действии на jsFiddle .