在使用vue的时候,遇到了定义原生事件与@xxx事件重合时,@xxx事件绑定不上的情况(感觉是被覆盖了)。具体代码如下
this.generateDiagram()
const inputCheck = e => {
e.target.value = e.target.value.replace(/[^\d.-]/, '')
e.target.value = e.target.value.replace(/\.+/, '.')
e.target.value = e.target.value.replace(
/(\d)(\.\d{0,3})\d*/,
'$1$2'
)
e.stopPropagation()
}
//todo:セレクトのinputに影響を及ぼすかも?
document.querySelectorAll('input').forEach(item => {
item.addEventListener('input', e => {
e.target.value = e.target.value.replace(/^0/, '')
inputCheck(e)
})
})
这是原生监听事件写的,监听画面上所有input框input事件的代码。
但是在特定的输入框中我又想监听特定的input事件,于是有如下代码
<v-text-field
:label="expensesInfoList[index+i-1].text"
density="compact"
variant="outlined"
color="primary"
:suffix="expensesInfoList[index+i-1].suffix"
v-model.number="datas[expensesInfoList[index+i-1].key]"
:disabled="expensesInfoList[index+i-1].disabled"
v-if="index+i-1 < expensesInfoList.length"
@input="expensesInfoList[index+i-1].onInput?expensesInfoList[index+i-1].onInput(expensesInfoList[index+i-1].onInputParameter):null"
>
</v-text-field>
其中有绑定input事件的代码,内容是动态绑定的写得比较绕,但是没有错,@input换成@click的话是可以触发的。
问题就是,有什么办法可以让两处地方对input事件加的监听函数叠加起来吗?
而不是其中一个覆盖掉另外一个想做的事。
我试过把原生的input监听那段删了,@input绑定的事件就好使了。
我希望可以两个地方写的都好使,得到他们叠加的效果
官方文档

叠加没问题,@唯一丶已经指出了是你把子标签的冒泡事件给禁止了没让事件向上冒泡