Установка таймера с использованием пользовательского ввода, JavaScript

Я очень новичок в программировании.

Для школьного проекта я пытаюсь установить setTimeout(); функция, использующая ввод пользователя. Вот мой код:

let header = document.getElementById('header');
let input = document.getElementById('input');
let btn = document.getElementsByTagName('div')[1];
let response1 = document.getElementById('response1');

function playSound() {
  setTimeout(function () {
    var x = document.getElementById("myAudio")
    x.play()
  }, 3000); //input.value?? or 1000 * input.value??
}

Обычно, если я хочу получить доступ к вводу пользователя в поле ввода, я бы набрал input.value. Однако функция setTimeout не распознает input.value как параметр, который можно настроить для использования в качестве обратного отсчета. Я не знаю, что делать.

Любая помощь будет принята с благодарностью.

Чего именно вы пытаетесь достичь? Вы хотите, чтобы пользователь вводил задержку?

Wais Kamal 13.12.2020 21:57

Можете ли вы опубликовать точную ошибку, которую вы получаете (консольный вывод)?

comonadd 13.12.2020 22:06

Я не получал сообщения об ошибке в консоли. Функция будет выполняться мгновенно, как если бы не было тайм-аута. т.е. моя функция playSound будет выполняться мгновенно, независимо от числа из input.value.

Angelo Carini 13.12.2020 22:12
Поведение ключевого слова "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) для оценки ваших знаний,...
0
3
183
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Функция setTimeout не распознает input.value как параметр, который можно настроить для использования в качестве обратного отсчета.

Оно признает это. Если вы столкнулись с ошибкой, то, скорее всего, ваш ввод является текстовым вводом, и в этом случае вам необходимо преобразовать его значение в число, прежде чем использовать его в setTimeout:

let header = document.getElementById('header');
let input = document.getElementById('input');
let btn = document.getElementsByTagName('div')[1];
let response1 = document.getElementById('response1');

function playSound() {
  setTimeout(function () {
    var x = document.getElementById("myAudio")
    x.play()
  }, Number(input.value));
}

Если введенное значение указано в секундах, используйте input.value * 1000.

Я почти уверен, что setTimeout автоматически преобразует второй параметр в число.

comonadd 13.12.2020 22:05

Это сработало! Большое спасибо, я потратил последние 2 часа, пытаясь понять это.

Angelo Carini 13.12.2020 22:07

@dmitryguzeev нет, не так. Он просто рассматривает любую введенную строку как 1, поэтому setTimeout(foo, "1000") совпадает с setTimeout(foo, 1)

Wais Kamal 13.12.2020 22:08

@WaisKamal Я тестировал его как на последних версиях Firefox, так и на Chrome. Если вы передадите «5000» в качестве второго параметра, он будет ждать 5 секунд.

comonadd 13.12.2020 22:11

О, извините, вы правы. Не знаю, как это сработало для ОП, хотя :)

Wais Kamal 13.12.2020 22:13

Чтобы выполнить setInterval динамически, вам нужно вызвать функцию вместо входного текста:

  1. Создайте функцию startInterval
  2. Вызов функции onChangeInterval в случае ввода текста со значением ввода

<script>
    var intervalId;
    
    function startInterval(_interval) {    
        intervalId = setInterval(function() {
        }, _interval);
    }
    
    function onChangeInterval (interval) {
        interval -= 100;
        clearInterval(intervalId);
        startInterval(interval);
    }
</script>

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