你好,
vue写的网页input大多应该都是用v-model绑定了值的吧,最近用油猴脚本操作网页实现自动化,遇到input框,直接用jq $('input').val(66),值输入了,但无效。jq模拟键盘输入。获取焦点,var e = jQuery.Event("keydown");//模拟一2113个键盘事件5261
e.keyCode = 13;//模拟按下一个删除键删除最后一个数
$("#id").tigger(e);//模拟按下回1653车
失去焦点,这样也不行。请问还有什么方法可以实现吗?
这个问题你解决了吗,我遇到这个问题卡了好久了
要知道input绑定什么事件,要触发指定的事件才行。使用jQuery trigger无效,使用原生js事件可以。示例如下,有帮助麻烦点个采纳【本回答右上角】,谢谢~~
<div id="app">
<input type="text" v-model="test" id="x" v-on:input="hello" />
</div>
<script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
new Vue({
el: '#app',
data: { test: '' },
methods: {
hello() {
console.log(this.test)
}
}
})
/**
* 触发指定事件
* @param eventName:事件名称
* @param targetElement:触发事件的对象
*/
function fireEvent(eventName, targetElement) {
if (document.createEvent) {
const event = document.createEvent('HTMLEvents');
event.initEvent(eventName, true, false);
targetElement.dispatchEvent(event);
} else if (document.createEventObject) {//IE
targetElement.fireEvent('input');
}
}
$('#x').val(123).trigger('input');//vue绑定了input事件,用jquery触发无效,未执行hello
setTimeout(() => {
fireEvent('input', x);//输出123
}, 3000);
</script>
这个代码你需要网页加载完使用才有效,建议加上$(function(){ 你的js代码 })