Я очень новичок в программировании.
Для школьного проекта я пытаюсь установить 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 как параметр, который можно настроить для использования в качестве обратного отсчета. Я не знаю, что делать.
Любая помощь будет принята с благодарностью.
Можете ли вы опубликовать точную ошибку, которую вы получаете (консольный вывод)?
Я не получал сообщения об ошибке в консоли. Функция будет выполняться мгновенно, как если бы не было тайм-аута. т.е. моя функция playSound будет выполняться мгновенно, независимо от числа из input.value.
Функция
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
автоматически преобразует второй параметр в число.
Это сработало! Большое спасибо, я потратил последние 2 часа, пытаясь понять это.
@dmitryguzeev нет, не так. Он просто рассматривает любую введенную строку как 1, поэтому setTimeout(foo, "1000")
совпадает с setTimeout(foo, 1)
@WaisKamal Я тестировал его как на последних версиях Firefox, так и на Chrome. Если вы передадите «5000» в качестве второго параметра, он будет ждать 5 секунд.
О, извините, вы правы. Не знаю, как это сработало для ОП, хотя :)
Чтобы выполнить setInterval динамически, вам нужно вызвать функцию вместо входного текста:
startInterval
onChangeInterval
в случае ввода текста со значением ввода<script>
var intervalId;
function startInterval(_interval) {
intervalId = setInterval(function() {
}, _interval);
}
function onChangeInterval (interval) {
interval -= 100;
clearInterval(intervalId);
startInterval(interval);
}
</script>
Чего именно вы пытаетесь достичь? Вы хотите, чтобы пользователь вводил задержку?