<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang = "en">
<head>
<meta http-equiv = "content-type" content = "text/html;
charset=utf-8">
<title>YUI Calendar Control Example</title>
<link rel = "stylesheet"
type = "text/css"
href = "yui/build/calendar/assets/skins/sam/calendar.css">
<script type = "text/javascript"
src = "yui/build/yahoo-dom-event/
yahoo-dom-event.js"></script>
<script type = "text/javascript"
src = "yui/build/calendar/calendar-min.js"></script>
<style type = "text/css">
input {
margin:0px 10px 0px 10px;
}
</style>
</head>
<body class = "yui-skin-sam">
<div>
<label>Please enter your date of birth:</label>
<input type = "text" name = "dobfield" id = "dobfield">
<img id = "calico" src = "E:\HP_PROJECT\cal.png"
alt = "Open the Calendar control">
</div>
<div id = "mycal"></div>
<script type = "text/javascript">
//create the namespace object for this example
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();
</script>
</body>
</html>
Я использовал приведенный выше код. Но проблема с кодом в том, что когда я щелкаю значок изображения, ничего не отображается. Я новичок в JavaScript. Пожалуйста, помогите мне, как реализовать слушателя.
Пожалуйста, посоветуйте мне, где делать изменения в коде.
Спасибо Падмаджа
Думаю, я скопировал это, как задумал ...
подождите - не следует ли оставлять исходный неправильный код в вопросе и мой правильный код в моем ответе?
если все-таки хотите переформатировать, скопируйте его исходный код из моего поста.
Как это должно быть отклонено? +1
похоже, что приведенный выше код получен из packtpub.com/article/…, который содержит множество ошибок, в основном использование Var вместо var в сценариях.



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


Проблема в том, что myCal - это локальная переменная функции launchCal(). Предоставление переменной myCal глобально доступного пространства имен сделает его доступным для каждой области.
Вот ваш исходный код (кто-то случайно вставил мой правильный код в ваш исходный вопрос = /)
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();
Теперь посмотрите мои изменения. Обратите внимание на использование глобального пространства имен YAHOO.
YAHOO.namespace("yuibook.calendar");
//define the lauchCal function which creates the calendar
YAHOO.yuibook.calendar.launchCal = function() {
//create the calendar object, specifying the container
YAHOO.yuibook.calendar.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
YAHOO.yuibook.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();
Ваш ответ должен быть в вашем ответе, а не в его вопросе. Теперь я понятия не имею, о чем он спрашивал, потому что вы изменили вопрос на «ответ». Что он сделал не так в исходном вопросе? Как кто-то может извлечь уроки из своей ошибки?
Я этого не делал, это делал Ле Дорфье. Надеюсь, он вернет его обратно. У меня недостаточно полномочий или чего-то еще, чтобы редактировать чужие сообщения. Во всяком случае - откатил, чтобы показать свой ответ.
этот ответ указывает на проблему, но в коде есть пара проблем. заявление myCal.render(); необходимо обновить до YAHOO.yuibook.calendar.myCal.render();. также Var showCal ... необходимо сделать var showCal ... , поскольку js чувствителен к регистру, а правильное ключевое слово - var с небольшим v. Эта ошибка повторяется в исходном материале (см. комментарий к OP) несколько раз. и не проблема с вашим ответом, но в исходном коде нет ничего, что могло бы скрыть календарь до щелчка по изображению, поэтому он всегда виден.
переформатируйте код, чтобы он был удобочитаемым.