Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在输入错误时,将文本输入保持为只读4s_Javascript_Html_Css - Fatal编程技术网

Javascript 在输入错误时,将文本输入保持为只读4s

Javascript 在输入错误时,将文本输入保持为只读4s,javascript,html,css,Javascript,Html,Css,对于以下代码 <input type="text" name="textinput" ><br> <style> input:-moz-read-only { /* For Firefox */ background-color: red; } input:read-only { background-color: red; } .hang{ -moz-animation-

对于以下代码

<input type="text" name="textinput" ><br>

<style>
    input:-moz-read-only { /* For Firefox */
       background-color: red;
    }

    input:read-only {
       background-color: red;
    }

    .hang{
       -moz-animation-name: example;
       animation-name: example;
       -moz-animation-duration: 4s;
        animation-duration: 4s;
     }
</style>

<script>
    document.formex.numberinput.onchange = checkIfNumber;
    function checkIfNumber(){
         if (parseInt(document.formex.numberinput.value) == NaN){
            document.formex.numberinput.innerHTML = document.formex.numberinput.value;
            document.formex.numberinput.readOnly = "true";
            document.formex.numberinput.className = "hang";
            document.formex.numberinput.readOnly = "false";
          }
     }
</script>

输入:-moz只读{/*用于Firefox*/ 背景色:红色; } 输入:只读{ 背景色:红色; } 杭{ -moz动画名称:示例; 动画名称:示例; -moz动画持续时间:4s; 动画持续时间:4s; } document.formex.numberinput.onchange=checkIfNumber; 函数checkIfNumber(){ if(parseInt(document.formex.numberinput.value)==NaN){ document.formex.numberinput.innerHTML=document.formex.numberinput.value;
document.formex.numberinput.readOnly=“true”; document.formex.numberinput.className=“hang”;
document.formex.numberinput.readOnly=“false”; } }

假设回调函数检查输入是否为
number
原语类型

if
回调函数块只执行最后一次赋值


您能帮我理解这个问题吗?

您需要使用
setTimeout
并将您的代码更新为以下内容

 function checkIfNumber(){
         if (isNaN(parseInt(document.formex.numberinput.value))){
            document.formex.numberinput.innerHTML = document.formex.numberinput.value;
            document.formex.numberinput.readOnly = "true";
            document.formex.numberinput.className = "hang";
            setTimeout(function(){            
               document.formex.numberinput.readOnly = false;
            }, 4000);
          }
     }

document.formex.numberinput.readOnly=“false”;不会真正等待动画结束,注意没有第二个参数的
parseInt
。如果有人输入“0xAF”,它可能会说这是一个有效的数字。。。有关更多信息,请参阅。我仍然看到在超时之前的三行代码不正确execute@overexchange-请检查我的最新答案。要检查NaN,我们应该使用isNaN函数is
input[readonly]
一个错误的选择器?@overexchange-不,这是可以的。然而,对于我们正在编写的代码,一旦设置了属性,我们就永远不会删除它。因此,只要将readonly属性添加到element,该样式就适用于删除代码不起作用的属性。请测试一下。