2015-06-21 7 views
0

Доброе утро.Javascript Salute Show

Пожалуйста, я хочу показать приветственное сообщение в зависимости от часов. Пробовал эту функцию автоинициализации, он работает, но независимо от времени, он показывает: «Спокойной ночи». Что я делаю неправильно? Может ли кто-нибудь помочь?

Вот код:

(function(){ 

    function saluteText() { 

     var d = new Date(); 
     var time = d.getHours(); 
     var divInnerHTML = document.querySelector('.name'); 

     if (time < 12) { 
      function addInnerHTML() { 
       divInnerHTML.innerHTML = 'Good morning!'; 
      } 
     } 
     else if (time >=12 && time <18) { 
      function addInnerHTML() { 
       divInnerHTML.innerHTML = 'Good evening!'; 
      } 
     } 
     else if (time >= 18 && time < 24) { 
      function addInnerHTML() { 
       divInnerHTML.innerHTML = 'Good night!'; 
      } 
     } 

     addInnerHTML(); 
    } 
    saluteText() 
})(); 
+0

Почему у вас есть такие 'addInnerHTML()' функции? Почему бы просто не установить innerHTML непосредственно в каждом случае if/else? Если вы хотите условно определить функцию, вам нужно объявить 'var addInnerHTML;' перед блоком if/else, а затем установить 'addInnerHTML = function() {...}' в if/else. – nnnnnn

ответ

0

Я думаю, что это проблема определения ваших функций.

Когда вы определяете функцию в javascript, она помещается поверх области.

Вы определяете функцию три раза, а последняя отображается только. Даже если вы поместите объявление между операторами If, все три будут созданы.

Вы можете попробовать это, удалив последнюю функцию, и вы увидите, что код говорит «Добрый вечер».

В этом случае решение вашей проблемы будет такой подход:

function addInnerHTML(message) { 
    divInnerHTML.innerHTML = message; 
} 

if (time < 12) { 

    addInnerHTML('Good morning!'); 
} 
else if (time >=12 && time <18) { 

    addInnerHTML('Good evening!'); 
} 
else if (time >= 18 && time < 24) { 

    addInnerHTML('Good night!'); 
} 
+1

* «Когда вы определяете функцию в javascript, она помещается поверх стека вызовов». * - Стол вызовов? Это не правильно. Кроме того, ваше решение теперь определяет функцию addInnerHTML() * четыре раза. – nnnnnn

+0

Вы правы, я немного ответил на этот ответ. Поскольку sumeet утверждает, что функции подняты, я смутил эти два. Когда я получу шанс, я подправлю этот ответ. – Pilatus