#javascript #html
#javascript #HTML
Вопрос:
Я написал очень простой таймер обратного отсчета на JavaScript, который я жестко запрограммировал, чтобы сообщать пользователю количество дней, оставшихся до определенной даты. Затем это должно быть показано на веб-странице.
Вот JavaScript:
var message, days;
if (new Date().getMonth() === 6) {
days = 34 - new Date().getDate();
message = "Coming in " days " days";
} else if (new Date().getMonth() === 7) {
if (new Date().getDate() > 2) {
message = "Almost there!";
} else if (new Date().getDate() === 2) {
message = "Coming in 1 day";
} else {
days = 3 - new Date().getDate();
message = "Coming in " days " days";
}
} else {
message = "Coming soon";
}
document.getElementById("coming_soon").innerHTML = message;
И вот HTML:
<span id="coming_soon"></span>
Проблема в том, что если я встрою JavaScript, он запускается идеально и отображается обратный отсчет. Однако, если я включу его в качестве отдельного .js
файла, обратный отсчет не будет показан.
Как я могу включить это как отдельный файл и при этом запустить его и показать обратный отсчет?
Я полный новичок в JavaScript и где-то между средним уровнем и новичком в HTML.
Заранее спасибо.
Комментарии:
1. Включите его в
document.ready
и ссылка на этот файл внизу вашей страницы должна сработать.2. @Justcode Извините, я не понимаю вашего предложения. Я ПОЛНЫЙ новичок в JavaScript. Буквально началось вчера.
3. хорошо, тогда я публикую это как ответ, который сложно объяснить
4. @Justcode Конечно, моя проблема просто в том, что я использую некоторый синтаксис, который работает только тогда, когда он включен встроенным в HTML?
5. как вы включаете внешний js-файл в свою HTML-страницу? Указан ли у вас правильный путь, чтобы файл действительно был включен?
Ответ №1:
Есть ли какие-либо сообщения в консоли ошибок браузера? Убедитесь, что скрипт включен после <span>
элемента, который вы пытаетесь изменить, или используйте defer
атрибут для <script>
элемента. В противном случае getElementById()
он не будет найден.
Ответ №2:
Это должно сделать это:
Без jQuery, а также для старых IE
var eventPrefix = "";
if (typeof window.addEventListener === "undefined" amp;amp; window.attachEvent) {
eventPrefix = "on";
window.addEventListener = window.attachEvent;
}
if (typeof window.addEventListener !== "undefined") {
window.addEventListener(eventPrefix 'load', function() {
var message, days;
if (new Date().getMonth() === 6) {
days = 34 - new Date().getDate();
message = "Coming in " days " days";
} else if (new Date().getMonth() === 7) {
if (new Date().getDate() > 2) {
message = "Almost there!";
} else if (new Date().getDate() === 2) {
message = "Coming in 1 day";
} else {
days = 3 - new Date().getDate();
message = "Coming in " days " days";
}
} else {
message = "Coming soon";
}
document.getElementById("coming_soon").innerHTML = message;
});
}
Предварительный просмотр:http://jsfiddle.net/4JPCP/1/show /
Оптимизированный код:http://jsfiddle.net/4JPCP/3 /
Комментарии:
1. Для такой простой задачи нет необходимости добавлять сложность прослушивателей событий. Особенно учитывая, что OP является абсолютным новичком.
Ответ №3:
Редактировать:
IIFE в этом случае избыточны, поскольку код OP не является самодостаточным в функции. Однако я мог бы оставить ответ здесь, если кто-то хочет глубже погрузиться в аргумент.
Возможно, вы также захотите изучить то, что обычно называется Немедленно вызываемой функцией Expression (IIFE).
Смотрите веб-сайт Bel Alman для получения дополнительной информации:
http://benalman.com/news/2010/11/immediately-invoked-function-expression/
По сути, обертывая свой код с помощью этого синтаксиса, вы указываете браузеру немедленно выполнить вашу функцию, и это делает свое дело:
(function(){
/* your code */
})();
Посмотрите на этот рабочий модуль с вашим кодом:http://plnkr.co/edit/cPObPCqVhavvWLtQbldd?p=preview
Комментарии:
1. Это почти противоположно тому, чего хочет OP. Выполнение на самом деле необходимо было отложить.
2. Это совсем не наоборот, поскольку это работает. Однако теперь я думаю, что IIFE может быть избыточным, поскольку код OP отсутствует в функции.