YAHOO.namespace("yuibook.calendar");
//define the lauchCal function which creates the calendar
YAHOO.yuibook.calendar.launchCal = function() {
//create the calendar object, specifying the container
var myCal = new YAHOO.widget.Calendar("mycal");
//draw the calendar on screen
myCal.render();
}
//define the showCal function which shows the calendar
Var showCal = function() {
//show the calendar
myCal.show();
}
//create calendar on page load
YAHOO.util.Event.onDOMReady(YAHOO.yuibook.calendar.launchCal);
//attach listener for click event on calendar icon
YAHOO.util.Event.addListener("calico", "click", showCal);
//myCal.hide();
Проблема с кодом заключается в том, что я не могу отобразить календарь, когда щелкаю значок. кто-нибудь может помочь. Я знал этого слушателя



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема в том, что переменная myCal не определена в функции showCal. Переменная myCal определена в функции launchCal и доступна только в рамках этой функции. Вам нужно будет сохранить ссылку на вашу переменную myCal.
Что-то вроде следующего должно помочь:
YAHOO.namespace("yuibook.calendar");
YAHOO.util.Event.onDOMReady(function() {
YAHOO.yuibook.calendar.myCal = new YAHOO.widget.Calendar("mycal");
YAHOO.yuibook.calendar.myCal.render();
YAHOO.util.Event.addListener("calico", "click", YAHOO.yuibook.calendar.myCal.show);
});
Взгляните на этот пример всплывающего календаря из документации YUI для получения более подробной информации.