Если выписка не работает с цветным кодом - PullRequest
0 голосов
/ 25 августа 2018

Код, который я говорю: всякий раз, когда нажимается клавиша «a», фон меняется. Этого не происходит, и я думаю, что это из-за цветового кода внутри оператора if.

var colors = ['#ce0e0e', '#079b0c', '#3e3fd6']; //red, green, blue

function changeBackground(){
   document.write("use 'a' key to change background");
   var colorAtRandom = colors[Math.floor(Math.random() * colors.length)];
   document.body.style.backgroundColor = colorAtRandom;
   document.getElementById('button').className = 'hidden'
}

window.addEventListener('keydown', checkKey, false);

function checkKey(key){
   if (key.keyCode == 65){
      if (colorAtRandom != '#ce0e0e'){
         changeBackground();
      } else {
         alert('background is red');
      }
   }
}
.hidden {
    display:none;
}
.show {
    display:block;
}
<input id=button type=button value='change backgound color' onclick='changeBackground()'>

Примечание редактора: В исходном коде сценарий был заключен в тег <script> внутри <head> без прослушивателя событий загрузки. Я не мог воспроизвести это для фрагмента. Чтобы увидеть оригинальный код, пожалуйста, обратитесь к редакции .

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

first не используйте document.write, secund сделает вашу переменную colorAtRandom global.

var colors = ['#ce0e0e', '#079b0c', '#3e3fd6']; //red, green, blue
var colorAtRandom;
    function changeBackground(){
  //    document.write("use 'a' key to change background");
      colorAtRandom = colors[Math.floor(Math.random() * colors.length)];
      document.body.style.backgroundColor = colorAtRandom;
      document.getElementById('button').className = 'hidden'
    }

    window.addEventListener('keydown', checkKey,false);
    function checkKey(key){
    console.log(key.keyCode);
      if (key.keyCode == 65){
        if (colorAtRandom != '#ce0e0e'){
          changeBackground();
        } else {
          console.log('background is red');
        }
      }
    } 
  .hidden {
    display:none;
  }
  .show {
    display:block;
  }
<input id="button" type="button" value='change backgound color' onclick='changeBackground()'>
0 голосов
/ 25 августа 2018

Проблемы лежат в области видимости.переменная colorAtRandom не может быть найдена в функции checkKey ().сделайте это глобальным, и оно будет работать.

Вторая проблема заключается в том, что прослушиватель событий не работает.Я изменил его, поэтому он будет добавлен, когда кнопка нажата.Поскольку document.write создает новый документ, вы потеряете список событий, созданный при загрузке.поэтому это не рекомендуется.

это должно исправить это.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Tester</title>
    <script type="text/javascript">
    var colors = ['#ce0e0e', '#079b0c', '#3e3fd6']; //red, green, blue
	
	var colorAtRandom = colors[Math.floor(Math.random() * colors.length)]; // this variable has to be global.
	
    function changeBackground(){
      //document.write("use 'a' key to change background");  using document.write is not advised. 
      colorAtRandom = colors[Math.floor(Math.random() * colors.length)]; // chose new random color. made it global to get rid of scope
      document.body.style.backgroundColor = colorAtRandom;
      document.getElementById('button').className = 'hidden';
	  window.addEventListener('keydown', checkKey, false); // add the event listener when button is pressed. 
    }
    function checkKey(key){
	console.log("test");
      if (key.keyCode == 65){
        if (colorAtRandom != '#ce0e0e'){
          changeBackground();
        } else {
          alert('background is red');
		  changeBackground();		// change background after alert so it doesnt get stuck.
        }
      }
    } 
</script>
<style>
  .hidden {
    display:none;
  }
  .show {
    display:block;
  }
</style>
</head>
<body>
<input id=button type=button value='change backgound color' onclick='changeBackground()'>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...