使用 Javascript 使输入框在用户输入后整整 3 秒内可编辑

Using Javascript to make input box editable for exactly 3 seconds after user input

我需要一个当用户在输入框中输入内容时执行的函数。该函数应使输入框在 3 秒内不可编辑,然后再使输入框可编辑。我有下面的功能,但它根本不起作用。我想知道我做错了什么,如何解决?

function makeUnedit (id) {

    setTimeout(function(){ document.getElementById(id).readOnly = false; }, 3000);

    success:function(setTimeout) {
        document.getElementById(id).readOnly = true;  
    }

}

编辑:

这个有效,但是如果您向输入框发送垃圾邮件,比如您每 100 毫秒左右输入 1 个输入,它将覆盖它,如果您继续以该速度向其发送垃圾邮件,则始终使 readOnly 为真。

document.getElementById(id).readOnly = true;
setTimeout(function(){ document.getElementById(id).readOnly = false; }, 1500);

这会起作用:

function makeUnedit (id) {

   document.getElementById(id).readOnly = true;

   setTimeout(function(){ 
       document.getElementById(id).readOnly = false; 
   }, 3000);

}

请注意,您作为参数传递给 setTimeout(argument, milliseconds) 的函数将在 x 毫秒后被调用。

success: 在这里是一个无意义的参数,应该会引发语法错误。

window.onload = function() {
  function makeUnedit (id) {
    document.getElementById(id).readonly = true;
    window.setTimeout(function() {
      document.getElementById(id).readonly = false;
    }, 3000);
  }
  
  document.getElementById("id").onfocus = function() { makeUnedit ("id") };
};
<input type="text" id="id"/>

据我估计,您对 success 关键字的使用似乎不正确。由于无论如何都不需要这样的声明,所以这里有一个解决方案。

function makeUnedit (id) {
  document.getElementById(id).readonly = true;
  window.setTimeout(function() {
    document.getElementById(id).readonly = false;
  }, 3000);
}

为您的处理程序添加以下代码:

document.getElementById(id).onfocus = function() { makeUnedit(id) };