[前端] 通过 JS 直接改变 input 的 value,在提交表单的时候无法通过校验:提示 input 的值不能为空,有解决办法吗 - V2EX
2022-11-14 15:23:13
Author: v2ex.com(查看原文)
阅读量:29
收藏
请问这个问题出现的原因是什么呢?
通过 JS 直接改变 value 与用户手动输入有什么区别呢?能否通过 JS 来模拟用户真实的输入呢?
拜托大家了🙏🙏
|
|
1
wunonglin 3 小时 47 分钟前
用 stackBlitz 之类的工具,附上代码
|
|
|
2
shuxhan 3 小时 23 分钟前
不太可能出现你这种情况,除非校验的方式是判断失去焦点时获取 value
|
|
|
4
cydysm 3 小时 17 分钟前 via iPhone
不知道你是用了框架还是用了原生 js 开发 之前在 vue 中业务也有这个需求,在改变值后 emit change input 事件
|
|
|
5
snimstice 3 小时 10 分钟前
@cydysm 页面是其他人的,我是给这个页面开发一个 chrome 的插件,帮助填写工单的。不太清楚这个页面的代码是怎么写的,但是确认没用 vue
|
|
|
8
snimstice 3 小时 6 分钟前
@wunonglin 感谢,但是我没有代码。我开发的是 chrome 插件,辅助用户填写表单的。通过 js 改变 input 的 value ,改了之后死活通不过那个页面上表单项的校验
|
|
|
9
eason1874 2 小时 57 分钟前
几年前遇到过,基本就是两种情况 一是赋值和取值方式不兼容,记不清了,反正就是 attr 之类的,取不到 二是输入表单并非提交表单,输入框监听键入事件,键入时把值同步到真正提交的表单,如果你直接修改输入框的值那就没发生键入事件,那就不会同步,所以真正提交的还是空 兼容性最好的方法就是模拟键盘输入
|
|
|
10
sharida 2 小时 49 分钟前
/** * 触发 dom 的 input 事件 * @param {Element} ele dom 元素 */ function dispatchInputEvent(ele) { const inputEvent = new InputEvent('input'); ele.dispatchEvent(inputEvent); } 试试
|
|
|
12
18601294989 2 小时 13 分钟前
如果是 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); }
|
|
|
14
snimstice 57 分钟前
@eason1874 el.addEventListener('input', e => { console.log('input trigger: ', e) }) el.setAttribute('value', value) el.value = value const inputEvent = new InputEvent('input'); el.dispatchEvent(inputEvent); 请问我这样写算是模拟键盘输入吗?我监听的事件可以触发,但是最终表单校验还是没有通过
|
文章来源: https://v2ex.com/t/895063#reply16
如有侵权请联系:admin#unsafe.sh