首页 前端知识 js 模拟回车 模拟键盘,给input框输入值 触发回车事件

js 模拟回车 模拟键盘,给input框输入值 触发回车事件

2024-02-13 10:02:17 前端知识 前端哥 802 696 我要收藏

js 模拟键盘 模拟输入 模拟回车Enter,给input框输入值 触发回车事件

  1. 使用js模拟按键输入的踩坑记录
    https://zhuanlan.zhihu.com/p/356661173

a)

let element = document.querySelector('#search') // input输入框
element.value = '文本内容' // 输入的内容
var event = new Event('input', {
'bubbles': true,
'cancelable': true
})
element.dispatchEvent(event)
复制

b)

$('.simple-input').val('abc').trigger('change')
let elem = window.document.getElementsByClassName('simple-input') // input输入框
window.inputValue = function (dom, st) {
var evt = new InputEvent('input', {
inputType: 'insertText',
data: st, // 输入的内容
dataTransfer: null,
isComposing: false
})
dom.value = st
dom.dispatchEvent(evt)
}
window.inputValue(elem, '123')
复制

c)

var element_input = window.document.querySelector('input') // input输入框
var _templMethod = element_input._valueTracker.getValue
var _templMethod = element_input.getValue
element_input._valueTracker.getValue = () => ''
element_input.value = '123' // 输入的内容
var event = new InputEvent('input', {
'bubbles': true,
'cancelable': true,
})
element_input.dispatchEvent(event)
element_input._valueTracker.getValue = _templMethod
复制
  1. 仅模拟回车事件
    https://juejin.im/post/6844904128305430541

    键盘键值对照表:
    https://blog.csdn.net/geekswg/article/details/120246209

    原文参考:
    http://wjhsh.net/robinunix-p-13685771.html
    https://www.cnblogs.com/robinunix/p/13685771.html

    浏览器兼容:
    https://www.bbsmax.com/A/KE5QpEnjJL/

    官方文档:
    https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyEvent

    正确方法:
    https://www.cnblogs.com/gisblogs/p/5821665.html

a)

let keyboard = document.querySelector('#search') // 元素
let ke = new KeyboardEvent('keypress', {
bubbles: true, cancelable: true, keyCode: 13
})
keyboard.dispatchEvent(ke)
复制

b)

let keyboardEvent = new KeyboardEvent('keydown', {
keyCode: 13, code: 'KeyEnter', key: 'Enter'
})
let initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? 'initKeyboardEvent' : 'initKeyEvent'
keyboardEvent[initMethod]('keypress', true, true, window, "Enter", 0, false, false, false, false)
document.getElementById('search').dispatchEvent(keyboardEvent)
复制

c)

var inpEle = document.querySelector('#search')
var event = document.createEvent('Event')
//注意这块触发的是keydown事件,在awx的ui源码中bind监控的是keypress事件,所以这块要改成keypress
event.initEvent('keypress', true, false)
event = Object.assign(event, { // 模拟回车
ctrlKey: false,
metaKey: false,
altKey: false,
which: 13,
keyCode: 13,
key: 'Enter',
code: 'Enter'
})
inpEle.focus()
inpEle.dispatchEvent(event)
复制

d)

function fireKeyEvent(el, evtType, keyCode) {
var evtObj
if (document.createEvent) {
evtObj = document.createEvent('UIEvents')
evtObj.initUIEvent(evtType, true, true, window, 1)
delete evtObj.keyCode;
if (typeof evtObj.keyCode === "undefined") {//为了模拟keycode
Object.defineProperty(evtObj, "keyCode", { value: keyCode })
} else {
evtObj.key = String.fromCharCode(keyCode)
}
if (typeof evtObj.ctrlKey === 'undefined') {//为了模拟ctrl键
Object.defineProperty(evtObj, "ctrlKey", { value: true })
} else {
evtObj.ctrlKey = true
}
console.log('evtObj:', evtObj)
el.dispatchEvent(evtObj)
}
}
fireKeyEvent(document.getElementById('search'), "keypress", 13) // 调用
复制

e)

function fireKeyEvent2(el, evtType, keyCode) {
var doc = el.ownerDocument
var win = doc.defaultView || doc.parentWindow, evtObj
console.log('doc:', doc)
console.log('win:', win)
if (doc.createEvent) {
if (win.KeyEvent) {
evtObj = doc.createEvent('KeyEvents')
evtObj.initKeyEvent(evtType, true, true, win, false, false, false, false, keyCode, 0)
} else {
evtObj = doc.createEvent('UIEvents')
Object.defineProperty(evtObj, 'keyCode', {
get: function () { return this.keyCodeVal }
})
Object.defineProperty(evtObj, 'which', {
get: function () { return this.keyCodeVal }
})
evtObj.initUIEvent(evtType, true, true, win, 1)
evtObj.keyCodeVal = keyCode
let key = evtObj.keyCode
let which = evtObj.which
let t = "keyCode " + key + " 和 (" + which + ") "
if (evtObj.keyCode !== keyCode) {
console.log(t + "不匹配")
} else {
console.log(t + "匹配")
}
}
el.dispatchEvent(evtObj)
} else if (doc.createEventObject) {
evtObj = doc.createEventObject()
evtObj.keyCode = keyCode;
el.fireEvent('on' + evtType, evtObj)
}
}
fireKeyEvent2(document.getElementById('search'), "keypress", 13) // 调用
复制
转载请注明出处或者链接地址:https://www.qianduange.cn//article/1956.html
标签
评论
发布的文章

jQuery 下载与安装教程

2024-02-28 11:02:44

若依中jquey相关问题

2024-02-28 11:02:41

【JavaWeb】1.JQuery

2024-02-28 11:02:21

jQuery日历签到插件下载

2024-02-28 11:02:20

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!