Javascript 输入类型=";“文本”;没有回声?

Javascript 输入类型=";“文本”;没有回声?,javascript,html,echo,Javascript,Html,Echo,新的JS。 我希望能够设置一个文本框,它不显示用户键入的任何内容,而是在代码中隐藏的消息的某个时间显示一个字符。 我让它几乎可以工作了,但在JS将其输出写入文本框并留下一个恼人的字母后,HTML输入似乎被打印到文本框中。 由于这似乎是在执行函数后发生的,因此仅从JS中清除框似乎没有帮助。非常感谢你的帮助。我是JS新手,所以你的解释对我来说不会太简单!谢谢以下是我的基本工作代码: <!DOCTYPE html> <html> <body> <p&

新的JS。 我希望能够设置一个文本框,它不显示用户键入的任何内容,而是在代码中隐藏的消息的某个时间显示一个字符。 我让它几乎可以工作了,但在JS将其输出写入文本框并留下一个恼人的字母后,HTML输入似乎被打印到文本框中。 由于这似乎是在执行函数后发生的,因此仅从JS中清除框似乎没有帮助。非常感谢你的帮助。我是JS新手,所以你的解释对我来说不会太简单!谢谢以下是我的基本工作代码:

<!DOCTYPE html>
<html>

<body>
    <p>In one sentence below, descibe free will.</p>
    <input type="text" id="text" onkeydown="myFunction()">
    <script>
        var i = 0;
        var will = "There is no free will.";

        function myFunction() {
            i = i + 1;
            document.getElementById("text").value = will.substring(0, i) + "  ";  

        }
    </script>
</body>

</html>

在下面的一句话中,描述自由意志

var i=0; var will=“没有自由意志。”; 函数myFunction(){ i=i+1; document.getElementById(“text”).value=will.substring(0,i)+; }
方法有点不同,但您可以使用
keyup

在下面的一句话中,描述自由意志

var i=0; var will=“没有自由意志。”; 函数myFunction(e){ i=i+1; document.getElementById(“text”).value=will.substring(0,i)+; }
问题在于
按键按下事件的计时。触发时,
input
的值尚未更改,请改用
keyup
事件,或者更确切地说是
input
事件,它还负责删除、粘贴和剪切的值。太棒了!我问之前花了2个小时,你的回答在5秒钟内就解决了。非常感谢!!!如果用户右键单击并将文本粘贴到字段中,则不会触发onkeydown事件。更彻底的解决方案是使用oninput(IE9+)、onchange(IE9+)和/或onpropertychange(@user3163495
onpropertychange
是一个有点危险的事件,它在以编程方式进行更改时也会触发。在OP的情况下,它会导致无限系列的事件触发。
onchange
仅在目标失去焦点后才会触发……如果用户右键单击并粘贴文本,则不会触发onkeydown事件一个更彻底的解决方案是使用oninput(IE9+)、onchange(IE9+)和/或onpropertychange(看看这两个演示,它们在最终效果上有点不同。尝试一下。还有,请确保您了解backspace也是一个
onkeydown
事件。您最好使用隐藏输入,并使用隐藏输入值的长度在
will
变量上使用子字符串。是的,粘贴也是如此。)或者将计数移动为
input
@acdcjunior不反对您的答案-简单地为OP提供信息,因为我可以想象,他们没有考虑有多少不同的操作包括按钮按下,但没有以OP可能认为的方式更改文本(它不会添加像按下
a
b
这样的字符)(退格键、CTRL键、回车键、箭头键等)。