怎么用 Js 脚本给 Vue 输入框赋值

2022-03-10 14:33:39 +08:00
 LieFlatjune

直接用 dom 的方式可以修改输入框内容,但是不能触发 Vue 内部响应式,vue 项目最后也无法获取输入框内的值

请问有什么方式 ,可以让 js 模拟输入事件 ,操作表单内容

1734 次点击
所在节点    问与答
10 条回复
LeeReamond
2022-03-10 14:38:41 +08:00
不是很熟悉 vue 代码,不过如果是 vue2 项目的话理论上你去找对应绑定的数据结构,他是一个被 vue 劫持后的数据,本身带有 getter 和 setter 触发响应式,显示调用大概可解
gauzung
2022-03-10 14:38:44 +08:00
ochatokori
2022-03-10 14:52:24 +08:00
先获取 dom ,再用 dom.__vue__拿到 vue 组件实例,然后想怎么改就怎么改
LieFlatjune
2022-03-10 15:14:46 +08:00
@ochatokori 刚刚亲测这个方法是可以的,不过得拿最外层的组件才可以。👍👍👍👍👍
LieFlatjune
2022-03-10 15:15:32 +08:00
@LeeReamond 3 楼的方法可以
ochatokori
2022-03-10 16:03:58 +08:00
@LieFlatjune #4 不一定是最外层,只要是 vue 组件的顶层都可以,换句话说就是组件实例的$el 绑定的元素
Envov
2022-03-10 18:59:41 +08:00
再说一个,组件 create 之后 window.temp=this:

temp.xxx=1233
WhateverYouLike
2022-03-10 20:42:09 +08:00
是的,只要拿到 Vue 实例就可以。最近因为要把原生 JS 和 build 后的 Vue 组件揉到一起,也碰到这样的问题。
weixiangzhe
2022-03-11 13:54:20 +08:00
参考我这个贴子里我的回复,大概是和你写测试用例时是一致的

https://v2ex.com/t/743219
weixiangzhe
2022-03-11 13:54:36 +08:00
需要自已触发一个事件

```js
const mouseClickEvents = ['mousedown', 'click', 'mouseup'];
function simulateMouseClick(element){
mouseClickEvents.forEach(mouseEventType =>
element.dispatchEvent(
new MouseEvent(mouseEventType, {
view: window,
bubbles: true,
cancelable: true,
buttons: 1
})
)
);
}

var element = document.querySelector('div[class="UFIInputContainer"]');
simulateMouseClick(element);
```

来自 https://stackoverflow.com/questions/40091000/simulate-click-event-on-react-element

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/839410

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX