原生js模拟输入字符串

作者:
淡白
创建时间:
2023-05-22 17:29:52
html 模拟输入

摘要:这个例子模拟了逐个字符输入文本的过程。首先获取了一个文本输入框元素,并定义了要输入的字符串和当前输入字符的索引。然后定义了一个 `simulateInput` 函数用于模拟逐个字符输入。在函数内部,检查是否还有字符需要输入,如果有,则获取当前要输入的字符,并创建一个 `InputEvent` 对象,将字符添加到文本输入框中,并分派 `inputEvent` 事件。然后增加当前输入字符的索引,并使用 `setTimeout` 函数在 100 毫秒后模拟下一个字符的输入。最后调用 `simulateInput` 函数开始模拟输入。 整个过程模拟了文本逐个字符输入的效果。可以根据需要调整输入速度,通过调整 `setTimeout` 函数的延迟时间来实现。

在这个例子中,我们首先获取了一个文本输入框元素,并定义了要输入的字符串和当前输入字符的索引。然后,我们定义了一个 simulateInput 函数,该函数用于模拟逐个字符输入。在 simulateInput 函数中,我们首先检查是否还有字符需要输入,如果有,就获取当前要输入的字符,并创建一个 InputEvent 对象,将当前字符添加到文本输入框中,并将 inputEvent 分派到该元素上。然后,我们增加当前输入字符的索引,并使用 setTimeout 函数在 100 毫秒后模拟下一个字符的输入。最后,我们调用 simulateInput 函数开始模拟输入。

这个例子中的输入速度是固定的,每个字符之间间隔 100 毫秒。如果需要模拟不同的输入速度,可以根据需要调整 setTimeout 函数的延迟时间。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input id="test-i" class="iii" type="text" />
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
</body>
<script>

    $("#test-i").on("input propertychange", function () {
        console.log($("#test-i").val())
    })

    function test() {
        const inputElement = document.getElementById('test-i'); // 获取文本输入框元素
        const inputString = 'Hello, world!'; // 要输入的字符串
        let index = 0; // 当前输入字符的索引
        function simulateInput() {
            if (index < inputString.length) { // 如果还有字符需要输入
                const char = inputString.charAt(index); // 获取当前要输入的字符
                const inputEvent = new InputEvent('input', { // 创建 input 事件
                    inputType: 'insertText',
                    data: char,
                    dataTransfer: null,
                    isComposing: false
                });
                inputElement.value += char; // 将当前字符添加到文本输入框中
                inputElement.dispatchEvent(inputEvent); // 分派 input 事件
                index++; // 增加当前输入字符的索引
                setTimeout(simulateInput, 100); // 100 毫秒后模拟下一个字符的输入
            }
        }
        simulateInput(); // 开始模拟输入
    }
</script>

</html>