在uniapp中input框的键盘事件,仅仅只有keyup事件,而且没有keydown事件,在app端软键盘在输入时更是无法判断用户按下的是哪一个键,如果我想判断按下的是不是删除,这都是极为困难的,网上的有的建议比较前后的值有没有减少,终归治标不治本,如果内容为空按下删除,也是判断不了的,以下是一个解决方案。
使用renderjs
封装组件,引入即可
<template>
<view></view>
</template>
<script>
export default {
methods: {
onEvent(event) {
this.$emit(event.type, event);
},
},
};
</script>
<script module="keyboard" lang="renderjs">
const names = ['keydown', 'keyup']
export default {
mounted () {
const onKey = (event) => {
const keys1 = ['type', 'timeStamp']
const keys2 = ['altKey', 'code', 'ctrlKey', 'isComposing', 'key', 'location', 'metaKey', 'repeat', 'shiftKey']
const keys3 = ['char', 'charCode', 'keyCode', 'keyIdentifier', 'keyLocation', 'which']
const data = {}
keys1.concat(keys2, keys3).forEach(key => data[key] = event[key])
this.$ownerInstance.callMethod('onEvent', data)
}
names.forEach(name => {
document.addEventListener(name, onKey, false)
})
},
beforeDestroy() {
names.forEach(name => {
document.removeEventListener(name, onKey, false)
})
},
}
</script>