请问这个问题出现的原因是什么呢?
通过 JS 直接改变 value 与用户手动输入有什么区别呢?能否通过 JS 来模拟用户真实的输入呢?
拜托大家了🙏🙏
![]() |
1
wunonglin 132 天前
用 stackBlitz 之类的工具,附上代码
|
![]() |
2
shuxhan 132 天前
不太可能出现你这种情况,除非校验的方式是判断失去焦点时获取 value
|
![]() |
3
krapnik 132 天前
https://note.ms/uzvf vue2 的时候整过
|
![]() |
4
cydysm 132 天前 via iPhone
不知道你是用了框架还是用了原生 js 开发
之前在 vue 中业务也有这个需求,在改变值后 emit change input 事件 |
8
snimstice OP @wunonglin 感谢,但是我没有代码。我开发的是 chrome 插件,辅助用户填写表单的。通过 js 改变 input 的 value ,改了之后死活通不过那个页面上表单项的校验
|
![]() |
9
eason1874 132 天前
几年前遇到过,基本就是两种情况
一是赋值和取值方式不兼容,记不清了,反正就是 attr 之类的,取不到 二是输入表单并非提交表单,输入框监听键入事件,键入时把值同步到真正提交的表单,如果你直接修改输入框的值那就没发生键入事件,那就不会同步,所以真正提交的还是空 兼容性最好的方法就是模拟键盘输入 |
![]() |
10
sharida 132 天前
/**
* 触发 dom 的 input 事件 * @param {Element} ele dom 元素 */ function dispatchInputEvent(ele) { const inputEvent = new InputEvent('input'); ele.dispatchEvent(inputEvent); } 试试 |
![]() |
12
18601294989 132 天前
如果是 React 写的可以试试 这段代码
function changeReactInputValue(inputDom,newText){ let lastValue = inputDom.value; inputDom.value = newText; let event = new Event('input', { bubbles: true }); event.simulated = true; let tracker = inputDom._valueTracker; if (tracker) { tracker.setValue(lastValue); } inputDom.dispatchEvent(event); } |