如何检测 textarea 内容是否已更改 JavaScript
How to detect if textarea content has changed with JavaScript
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<textarea name="" id="a" cols="30" rows="10"></textarea>
<textarea name="" id="b" cols="30" rows="10"></textarea>
<textarea name="" id="c" cols="30" rows="10"></textarea>
</body>
</html>
js
const first = document.getElementById("a");
const second = document.getElementById("b");
const third = document.getElementById("c");
first.addEventListener("input", () => {
second.value = first.value;
});
second.addEventListener("change", () => {
console.log("work!!")
third.value = second.value;
});
codepen -> https://codepen.io/dmgpgdmgpg/pen/NWRxVbg?editors=1111
第一个 -> 第二个没问题
但第二 -> 第三行不通
因为当用户 提交对元素值的更改时,会为 input、select 和 textarea 元素触发更改事件。(MDN)
如何检测第一个文本区域变化后第二个文本区域的变化?
我想从第一传到第二,从第二传到第三(不是第一 -> 第三)
如果你想在每次输入第二个文本区域后更改第三个文本区域输入,与第一个文本区域的工作方式相同,试试这个:
<textarea name="" id="a" cols="30" rows="10"></textarea>
<textarea name="" id="b" cols="30" rows="10" oninput="changeText()"></textarea>
<textarea name="" id="c" cols="30" rows="10"></textarea>
输入事件:
这个事件类似于onchange事件。不同之处在于 oninput 事件在元素值更改后立即发生,而 onchange 事件在元素失去焦点时发生,在内容已更改后发生。另一个区别是 onchange 事件也适用于元素。 source
编辑:
如果您需要检测 JS 触发的更改而不是用户触发的更改,最好的方法可能是仅添加事件调度
const first = document.getElementById("a");
const second = document.getElementById("b");
const third = document.getElementById("c");
const event = new Event('input', {
bubbles: true,
cancelable: true,
});
first.addEventListener("input", () => {
second.value = first.value;
second.dispatchEvent(event);
});
second.addEventListener ('input', () => {
third.value = second.value;
});
除了手动触发之外,我没有找到任何方法来在不是来自用户本人的更改时从 textarea 触发事件
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<textarea name="" id="a" cols="30" rows="10"></textarea>
<textarea name="" id="b" cols="30" rows="10"></textarea>
<textarea name="" id="c" cols="30" rows="10"></textarea>
</body>
</html>
js
const first = document.getElementById("a");
const second = document.getElementById("b");
const third = document.getElementById("c");
first.addEventListener("input", () => {
second.value = first.value;
});
second.addEventListener("change", () => {
console.log("work!!")
third.value = second.value;
});
codepen -> https://codepen.io/dmgpgdmgpg/pen/NWRxVbg?editors=1111
第一个 -> 第二个没问题 但第二 -> 第三行不通
因为当用户 提交对元素值的更改时,会为 input、select 和 textarea 元素触发更改事件。(MDN)
如何检测第一个文本区域变化后第二个文本区域的变化?
我想从第一传到第二,从第二传到第三(不是第一 -> 第三)
如果你想在每次输入第二个文本区域后更改第三个文本区域输入,与第一个文本区域的工作方式相同,试试这个:
<textarea name="" id="a" cols="30" rows="10"></textarea>
<textarea name="" id="b" cols="30" rows="10" oninput="changeText()"></textarea>
<textarea name="" id="c" cols="30" rows="10"></textarea>
输入事件:
这个事件类似于onchange事件。不同之处在于 oninput 事件在元素值更改后立即发生,而 onchange 事件在元素失去焦点时发生,在内容已更改后发生。另一个区别是 onchange 事件也适用于元素。 source
编辑:
如果您需要检测 JS 触发的更改而不是用户触发的更改,最好的方法可能是仅添加事件调度
const first = document.getElementById("a");
const second = document.getElementById("b");
const third = document.getElementById("c");
const event = new Event('input', {
bubbles: true,
cancelable: true,
});
first.addEventListener("input", () => {
second.value = first.value;
second.dispatchEvent(event);
});
second.addEventListener ('input', () => {
third.value = second.value;
});
除了手动触发之外,我没有找到任何方法来在不是来自用户本人的更改时从 textarea 触发事件