Почему изображения не подходят для document.createElement - PullRequest
0 голосов
/ 24 марта 2020

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

Пример изображения был скопирован ниже

example

«Оценка» также не отображается. Любая помощь будет принята с благодарностью :)

var number1;
var number2;
var response;
var calcanswer;
var score = 0;
window.onload = areaquestion1;
myScore.text = "SCORE: " + score;

function areaquestion1() {
    var question = document.createElement("question");
    question.setAttribute("src", "Images/2*1.png");
    question.setAttribute("width", "304");
    question.setAttribute("height", "228");
    question.setAttribute("alt", "2*1");
    document.body.appendChild(question);
    var number1 = 2
    var number2 = 1
    calcanswer = (number1*number2);
    var question = document.getElementById("question");
    question.innerHTML = "What is the area of this lego brick?";
    check();
    areaquestion2();
}

function areaquestion2() {
    var question = document.createElement("question");
    question.setAttribute("src", "Images/3*2.png");
    question.setAttribute("width", "304");
    question.setAttribute("height", "228");
    question.setAttribute("alt", "3*2");
    document.body.appendChild(question);
    var number1 = 3
    var number2 = 2
    calcanswer = (number1*number2);
    var question = document.getElementById("question");
    question.innerHTML = "What is the area of this lego brick?";
    check();
    areaquestion3();
}

function check()
{
    var statusDiv = document.getElementById("status");
    response=document.getElementById("answer").value;

    if(response != calcanswer)
    statusDiv.innerHTML="Incorrect";
    else
    if (response==calcanswer)
    {
        statusDiv.innerHTML="Very good!";
        score ++;
        document.getElementById("score").textContent = score
        document.getElementById("answer").value = "";
        problem();
    }
}
<!DOCTYPE html>
<html>
<title>Lego Area</title>
  <head>
    <link rel="stylesheet" href="CSS/Play.css">
    <script src="JavaScript/Play.js"></script>
  </head>
<body onload="areaquestion1();">
  
  <div class="header">
    <h1>LEGO AREA</h1>
    <p>Calculating <b>area</b> with Emmet.</p>
    <div id="score" class="score" value="SCORE:"></div>
  </div>
    
  <form>
    <div class="row">
      
      <div class="side">
        <div id="question"></div>
        <div id ="prompt"></div>
        <input type="text" id="answer"/>
        
      </div>

      <div class="main">
        <input id="solve" type="button" value="CHECK!" onclick="check()" />
      </div>

    </div>
  </form>
  <div id="status"></div>
  <!-- Footer -->
  <div class="footer">
    <div class="practice"> <a href="Practice.html"><img src="Images/legoBlue2.png" id="practicebtn"  width="20%"></a></div>
    <div class="play"> <a href="Play.html"><img src="Images/legored2.png" id="playbtn" width="20%"></a></div>
  </div>

  
</body>
</html>

1 Ответ

0 голосов
/ 24 марта 2020

Это мой первый вопрос, на который я пытаюсь ответить - это довольно большое дело. Во всяком случае ...

Несколько вещей, которые я заметил:

  1. Я немного запутался, читая код, видя, что переменная question так часто используется для различных частей код. Поэтому я изменил var question на var imageBlock, чтобы сделать его более читабельным для меня.

  2. Вы выполняли функцию areaquestion1() onload. Поскольку функция check() выполнялась как часть функции areaquestion1(), она также выполнялась, по очереди отображая «Неверно» даже до ввода ответа. Я изменил это значение на document.getElementById("solve").check();, чтобы оно работало только после ПРОВЕРКИ! кнопка была нажата.

  3. Наконец-то дойдем до вашего актуального вопроса. Похоже, вы пытаетесь использовать document.createElement для создания изображения с id из question, однако на основе вундеркиндов для гиков и W3 Schools вы используете document.createElement для создания элемента img. ТОГДА вы можете установить атрибут id на то, что вам нравится. В этом случае я переключил его на imageBlock.setAttribute("id", "madeUpImg");, чтобы улучшить читаемость.

Так вот, что я и сделал, я думаю, что вы можете сделать много улучшений, но это работает, и это даст вам хороший старт:

function areaquestion1() {
var imageBlock = document.createElement("IMG");
imageBlock.setAttribute("id", "madeUpImg");
imageBlock.setAttribute("src", "guWFE.png");
imageBlock.setAttribute("width", "304");
imageBlock.setAttribute("height", "228");
imageBlock.setAttribute("alt", "2*1");
document.body.appendChild(imageBlock); // this appends it to the bottom of the page
number1 = 2
number2 = 1
calcanswer = (number1*number2);
var question = document.getElementById("question");
question.innerHTML = "What is the area of this lego brick?";
document.getElementById("solve").check();
// areaquestion2(); }

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

  1. Чтобы добавить его в соответствующее место: у меня не было времени вернуться в свой код, но это то, что Я думаю. В настоящее время, когда вы читаете свой код, у вас есть document.body.appendChild(question); Этот JavaScript говорит компьютеру найти документ, затем найти тело этого документа и запустить функцию appendChild. Итак, в основном это говорит - «компьютер, добавь переменную вопроса в тело документа». Итак, что с этим не так? Ну, вы хотите добавить его к указанному c div! Итак, вы очень близки, но вы не захватываете question div! Вам нужно использовать код, чтобы сообщить компьютеру, что нужно найти вопрос div, а затем добавить изображение к этому div. Я бы сделал что-то вроде этого: document.getElementById('question').appendChild(imageBlock) теперь это означает, что код захватывает div, к которому вы хотите добавить его, добавляя imageBlock к этому div.

  2. Я прокомментировал это areaquestion2, потому что я знаю, что вы столкнетесь с большим количеством проблем. 1. Если вы вызовете areaquestion2 в функции areaquestion1, она запустится сразу после загрузки сайта (вы вызываете область question1 при загрузке). Я думаю, что это заставит оба изображения появляться одновременно. Почему? Он просто получает указание добавить другое изображение к вопросу div. 2. Возможно, вы не хотите, чтобы оба изображения появлялись одновременно. Итак, вам нужно будет найти способ заменить первое изображение, а не пытаться добавить другое.

Вот и все, чем я могу вам сейчас помочь. Я думаю, что если вы продолжите работать над этим, а затем проведете рефакторинг, вы многому научитесь. Я думаю, что вы должны попытаться свести это к одной функции, назначив вопросы переменным, а затем передав эти переменные в качестве аргументов вашей функции. Если вы еще этого не сделали, я бы настоятельно рекомендовал пройти урок FreeCodeCamp по урокам.

Надеюсь, это помогло !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...