使用用户输入JavaScript设置计时器

使用用户输入JavaScript设置计时器,javascript,function,settimeout,Javascript,Function,Settimeout,我对编程很陌生 对于一个学校项目,我正在尝试设置一个setTimeout();使用用户输入的函数。 这是我的密码: let header = document.getElementById('header'); let input = document.getElementById('input'); let btn = document.getElementsByTagName('div')[1]; let response1 = document.getElementById('respon

我对编程很陌生

对于一个学校项目,我正在尝试设置一个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识别为可设置为用作倒计时的参数。我不知道该怎么办

任何帮助都将不胜感激

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
函数无法将
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

动态执行setInterval,您需要调用函数而不是输入文本:

  • 创建一个函数
    startInterval
  • 在输入文本带有输入值的情况下调用函数
    onChangeInterval

  • 
    var有效期;
    函数startInterval(_区间){
    intervalId=setInterval(函数(){
    }(u间期),;
    }
    函数onChangeInterval(interval){
    区间-=100;
    clearInterval(intervalId);
    startInterval(间隔);
    }
    
    要动态执行setInterval,您需要调用函数而不是输入文本:

  • 创建一个函数
    startInterval
  • 在输入文本带有输入值的情况下调用函数
    onChangeInterval

  • 
    var有效期;
    函数startInterval(_区间){
    intervalId=setInterval(函数(){
    }(u间期),;
    }
    函数onChangeInterval(interval){
    区间-=100;
    clearInterval(intervalId);
    startInterval(间隔);
    }
    
    您到底想实现什么目标?你想让用户输入延迟吗?你能公布你得到的确切错误吗(控制台输出)?我在控制台中没有收到错误消息。该函数将立即执行,就像没有超时一样。也就是说,我的playSound函数将立即执行,而不管输入值中的数字是多少。您到底想实现什么?你想让用户输入延迟吗?你能公布你得到的确切错误吗(控制台输出)?我在控制台中没有收到错误消息。该函数将立即执行,就像没有超时一样。也就是说,我的playSound函数将立即执行,而与输入的.value中的数字无关。我很确定
    setTimeout
    会自动将第二个参数转换为数字。这很有效!非常感谢你,我花了两个小时试图弄明白这一点。@dmitryguzeev不,没有。它只将输入的任何字符串视为1,因此
    setTimeout(foo,“1000”)
    setTimeout(foo,1)
    @WaisKamal我在最新的Firefox和Chrome版本上测试了它。如果您将“5000”作为第二个参数传递,它将等待5秒。哦,对不起,您是对的。不知道它是如何为OP工作的:)我很确定
    setTimeout
    会自动将第二个参数转换为数字。这很有效!非常感谢你,我花了两个小时试图弄明白这一点。@dmitryguzeev不,没有。它只将输入的任何字符串视为1,因此
    setTimeout(foo,“1000”)
    setTimeout(foo,1)
    @WaisKamal我在最新的Firefox和Chrome版本上测试了它。如果您将“5000”作为第二个参数传递,它将等待5秒。哦,对不起,您是对的。不知道它是如何为OP工作的:)