解决el-input使用原生JS事件修改值data后v-model值不同步的问题:
<el-input v-model="a_item.C_ISBN" size="medium" type="textarea" placeholder="请填写商品ID,以英文分号';'分割" @blur="btKeyUp"></el-input>
//限制输入特殊字符 btKeyUp(e) { e.target.value = e.target.value.replace(/[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、]/g,";"); },
这时候问题出现了,v-html的值并没有改变
原因:js修改时没有触发input事件$emit(‘input’,value)
解决方法:
e.target.dispatchEvent(new Event('input'))
使用方式:
btKeyUp(e) { e.target.value = e.target.value.replace(/[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、]/g,";"); e.target.dispatchEvent(new Event('input')) },
扩展知识点
//自定义事件 const inputEvent=new Event('input') window.dipatchEvent(inputEvent) //手动触发 window.addEventListener('input',funciton(){ }) //这种得需要用window对象监听 dom.dipatchEvent(inputEvent) //手动触发 就这相当vue中$emit('input') dom.addEventListener('input',funciton(){ }) //相当于$on('input') //和以上同理。可以搜索一下自定义事件学习一下就明白了