首页 > 建站教程 > 前端框架 >  el-input使用原生JS事件修改值data后v-model值不同步正文

el-input使用原生JS事件修改值data后v-model值不同步

解决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') 
//和以上同理。可以搜索一下自定义事件学习一下就明白了