7
[前端] 通过 JS 直接改变 input 的 value,在提交表单的时候无法通过校验:提示 input...
source link: https://www.v2ex.com/t/895063
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
[前端] 通过 JS 直接改变 input 的 value,在提交表单的时候无法通过校验:提示 input 的值不能为空,有解决办法吗
snimstice · 5 小时 30 分钟前 · 611 次点击请问这个问题出现的原因是什么呢?
通过 JS 直接改变 value 与用户手动输入有什么区别呢?能否通过 JS 来模拟用户真实的输入呢?
拜托大家了🙏🙏
16 条回复 • 2022-11-14 14:36:18 +08:00
wunonglin 5 小时 27 分钟前 用 stackBlitz 之类的工具,附上代码
|
shuxhan 5 小时 3 分钟前 不太可能出现你这种情况,除非校验的方式是判断失去焦点时获取 value
|
cydysm 4 小时 56 分钟前 via iPhone 不知道你是用了框架还是用了原生 js 开发
之前在 vue 中业务也有这个需求,在改变值后 emit change input 事件 |
snimstice 4 小时 46 分钟前 @wunonglin 感谢,但是我没有代码。我开发的是 chrome 插件,辅助用户填写表单的。通过 js 改变 input 的 value ,改了之后死活通不过那个页面上表单项的校验
|
eason1874 4 小时 37 分钟前 几年前遇到过,基本就是两种情况
一是赋值和取值方式不兼容,记不清了,反正就是 attr 之类的,取不到 二是输入表单并非提交表单,输入框监听键入事件,键入时把值同步到真正提交的表单,如果你直接修改输入框的值那就没发生键入事件,那就不会同步,所以真正提交的还是空 兼容性最好的方法就是模拟键盘输入 |
sharida 4 小时 29 分钟前 /**
* 触发 dom 的 input 事件 * @param {Element} ele dom 元素 */ function dispatchInputEvent(ele) { const inputEvent = new InputEvent('input'); ele.dispatchEvent(inputEvent); } 试试 |
18601294989 3 小时 53 分钟前 如果是 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); } |
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK