Переназначить переменную со случайным числом при выполнении условия (ванильный Javascript)

Я хотел бы знать, как сгенерировать новое случайное число после выполнения условия оператора if. Как только длина массива достигнет 3, переназначьте переменной randomNumber новое число. На данный момент я не вижу никаких изменений, когда переменная randomNumber регистрируется в консоли и выполняется условие, число не меняется без обновления страницы.

let randomNumber = Math.floor(Math.random() * 100);

console.info(randomNumber);

const numberArr = [];

const form1 = document.getElementById("form1");

if (numberArr.length === 3) {
        numberArr.splice(0, 3);
        randomNumber = Math.floor(Math.random() * 100);
};

form1.addEventListener("submit", e => {
    const values = document.getElementsByName("number")[0].value;
    numberArr.push(values);
    e.preventDefault();
    form1.reset();
});
          <form id = "form1">

                <div class = "row w-100 d-flex justify-content-between div1">

                    <div class = "col-12 d-flex justify-content-center">
                            <input type = "number" name = "number" id = "number" min = "1" max = "100">
                    </div>

                    <div class = "col-12 d-flex justify-content-center">
                        <button type = "submit" form = "form1" id = "sub1">Submit</button>
                    </div>

                </div>

        </form>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
27
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

let randomNumber = Math.floor(Math.random() * 100);

console.info(randomNumber);

const numberArr = [];

const form1 = document.getElementById("form1");

form1.addEventListener("submit", e => {
    const values = document.getElementsByName("number")[0].value;
    numberArr.push(values);
    e.preventDefault();
    if (numberArr.length === 3) {
        numberArr.splice(0, 3);
        randomNumber = Math.floor(Math.random() * 100);
        console.info(randomNumber);
       };
    form1.reset();
});
<form id = "form1">

                <div class = "row w-100 d-flex justify-content-between div1">

                    <div class = "col-12 d-flex justify-content-center">
                            <input type = "number" name = "number" id = "number" min = "1" max = "100">
                    </div>

                    <div class = "col-12 d-flex justify-content-center">
                        <button type = "submit" form = "form1" id = "sub1">Submit</button>
                    </div>

                </div>

        </form>

Спасибо, но это не переназначает исходную переменную с новым случайным числом

jordantocode11 15.05.2022 15:09

обновил код не могли бы вы проверить?

mrtechtroid 15.05.2022 15:18

Похоже, он генерирует новое случайное число, но можно ли снова использовать это число в моем коде? Если я возьму исходную переменную и использую ее снова, она будет отображаться как измененная? это может не иметь никакого смысла извините

jordantocode11 15.05.2022 15:26

да, это можно снова использовать в вашем коде

mrtechtroid 15.05.2022 15:29

Это был глупый вопрос, который я уже задавал в своем другом коде, я просто упростил его, когда писал здесь. Спасибо

jordantocode11 15.05.2022 15:33

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

let randomNumber = Math.floor(Math.random() * 100);
console.info(randomNumber);

const numberArr = [];

const form1 = document.getElementById("form1");
form1.addEventListener("submit", e => {
  e.preventDefault();
  
  const values = document.getElementsByName("number")[0].value;
  numberArr.push(values);
  form1.reset();
  
  if (numberArr.length === 3) {
    numberArr.splice(0, 3);
    randomNumber = Math.floor(Math.random() * 100);
        console.info(randomNumber);
  }
});
  <form id = "form1">
    <div class = "row w-100 d-flex justify-content-between div1">
      <div class = "col-12 d-flex justify-content-center">
        <input type = "number" name = "number" id = "number" min = "1" max = "100">
      </div>
      <div class = "col-12 d-flex justify-content-center">
        <button type = "submit" form = "form1" id = "sub1">Submit</button>
      </div>
    </div>
  </form>

Кроме того, numberArr не имеет смысла в этом коде, потому что вы можете использовать простой счетчик и увеличивать его на 1 каждый раз, когда форма отправляется, и сбрасывать его после условие выполнено.

Извините, ваш действительно работал. Это была моя ошибка. На самом деле я уже сделал это в своем коде, прежде чем упростить его, чтобы добавить его в stackoverflow, но я не учитывал область, когда добавлял его здесь.

jordantocode11 15.05.2022 15:42

Проверяйте в функции обработчика (так: каждый раз, когда нажимается кнопка). Вот упрощенный фрагмент с использованием делегация мероприятия.

document.addEventListener(`click`, handle);
let randomNumber = Math.floor(Math.random() * 100);
console.info(`initial ${randomNumber}`);
let numberArr = [];

function handle(evt) {
  if (evt.target.id === `sub1`) {
    numberArr.push(+document.querySelector(`#number`).value ?? 0);
    const len = numberArr.length;
    if (numberArr.length === 3) {
      randomNumber = Math.floor(Math.random() * 100);
      numberArr = [];
    }
    return console.info(randomNumber);
  }
}
<div class = "row w-100 d-flex justify-content-between div1">

  <div class = "col-12 d-flex justify-content-center">
    <input type = "number" name = "number" id = "number" min = "1" max = "100">
  </div>

  <div class = "col-12 d-flex justify-content-center">
    <button type = "submit" form = "form1" id = "sub1">Submit</button>
  </div>

</div>

Другие вопросы по теме