请问这个问题出现的原因是什么呢?
通过 JS 直接改变 value 与用户手动输入有什么区别呢?能否通过 JS 来模拟用户真实的输入呢?
拜托大家了🙏🙏
1
wunonglin 2022-11-14 11:35:41 +08:00
用 stackBlitz 之类的工具,附上代码
|
2
shuxhan 2022-11-14 11:59:18 +08:00
不太可能出现你这种情况,除非校验的方式是判断失去焦点时获取 value
|
3
krapnik 2022-11-14 12:05:02 +08:00
https://note.ms/uzvf vue2 的时候整过
|
4
cydysm 2022-11-14 12:06:07 +08:00 via iPhone
不知道你是用了框架还是用了原生 js 开发
之前在 vue 中业务也有这个需求,在改变值后 emit change input 事件 |
5
snimstice OP @cydysm 页面是其他人的,我是给这个页面开发一个 chrome 的插件,帮助填写工单的。不太清楚这个页面的代码是怎么写的,但是确认没用 vue
|
8
snimstice OP @wunonglin 感谢,但是我没有代码。我开发的是 chrome 插件,辅助用户填写表单的。通过 js 改变 input 的 value ,改了之后死活通不过那个页面上表单项的校验
|
9
eason1874 2022-11-14 12:25:49 +08:00
几年前遇到过,基本就是两种情况
一是赋值和取值方式不兼容,记不清了,反正就是 attr 之类的,取不到 二是输入表单并非提交表单,输入框监听键入事件,键入时把值同步到真正提交的表单,如果你直接修改输入框的值那就没发生键入事件,那就不会同步,所以真正提交的还是空 兼容性最好的方法就是模拟键盘输入 |
10
sharida 2022-11-14 12:33:34 +08:00
/**
* 触发 dom 的 input 事件 * @param {Element} ele dom 元素 */ function dispatchInputEvent(ele) { const inputEvent = new InputEvent('input'); ele.dispatchEvent(inputEvent); } 试试 |
12
18601294989 2022-11-14 13:09:19 +08:00
如果是 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); } |