提问人:user3419148 提问时间:11/17/2023 最后编辑:mplungjanuser3419148 更新时间:11/17/2023 访问量:22
如何通过javascript将输入字段标记为更改或编辑?
How to mark an input field as changes or edited via javascript?
问:
我有一个用户脚本,可以将数据输入到html表单中。喜欢
document.getElementById('username').value = '[email protected]';
但是此表单有一些花哨的检查,以检测字段是否已更改。因此,当我通过 javascript 填充字段时,会出现“空值”之类的错误,但是当我在字段中键入或粘贴相同的文本时,它就可以工作了。
因此,我需要以某种方式将该字段标记为“已更改”或模仿一些实际输入字段以通过检查,例如伪造退格键以删除最后一个字符。
这怎么能做到?
答:
0赞
Fito
11/17/2023
#1
这是一个非常常见的问题,发生这种情况是因为当您以物理方式向表单添加一些输入时,会触发一个事件(更改或输入,甚至是 keyup 事件,具体取决于您执行的操作),但是,当您使用 JS 将值添加到输入时,这些事件不会触发,并且表单不知道您更改了值。
对我来说,当我发现这个问题时,我使用 dispatchEvent() 方法创建了一个新事件。
例如:
// Get the input (capture)
const inpt = document.getElementById('username');
// Set the value
inpt.value = '[email protected]';
// Create the event
inpt.dispatchEvent(new Event('input'));
此外,我发现有时将“捕获”与“设置”分开更有利于代码正常工作。
让我知道它是否有效!
评论
0赞
mplungjan
11/17/2023
我已经评论过了。如果这是答案,那么这是一个巨大的骗局
0赞
mplungjan
11/17/2023
此外,触发更改可能比输入或两者兼而有之更有用
0赞
user3419148
11/17/2023
我尝试了dispatchevent,但它没有用。表格比我更聪明。但是,我发现了一个使用查询参数的工作,这对我有用。
评论
let event = new Event('change'); let userName = document.getElementById('username'); userName.value = '[email protected]'; userName.dispatchEvent(event);