Javascript 如果使用了preventDefault,如何使Vue查看输入元素中的更改?
这是一个非常简单的例子。我不想在按enter键时在textarea中创建换行符。这就是我在处理程序中调用Javascript 如果使用了preventDefault,如何使Vue查看输入元素中的更改?,javascript,vue.js,Javascript,Vue.js,这是一个非常简单的例子。我不想在按enter键时在textarea中创建换行符。这就是我在处理程序中调用preventDefault的原因。我还修改了textarea中的值。问题是模型没有得到更新,因为我使用了preventDefault。 如何防止Enter键入换行符并使Vue查看textarea中的更改 请注意,我使用了el.value(更新元素)而不是this.value(Vue模型),因为我希望光标保持在相同的位置。如果我更新模型数据,则在渲染视图后光标将重置到末尾,并且我无法如此轻松地
preventDefault
的原因。我还修改了textarea中的值。问题是模型没有得到更新,因为我使用了preventDefault
。
如何防止Enter键入换行符并使Vue查看textarea中的更改
请注意,我使用了el.value
(更新元素)而不是this.value
(Vue模型),因为我希望光标保持在相同的位置。如果我更新模型数据,则在渲染视图后光标将重置到末尾,并且我无法如此轻松地修复它的位置
我需要一种带有$nextTick
的黑客来固定光标位置:
this.$nextTick(() => {
el.setSelectionRange(cursorPos, cursorPos);
})
所以我不想让事情变得复杂,也不想触摸模型并导致视图被重新渲染。为什么?我只想让Vue注意到输入值的变化。我觉得我需要手动发出一些事件(为我的textarea触发输入事件,但如何触发?)
newvue({
el:“#应用程序”,
数据:{
价值观:“你好,世界”
},
方法:{
固定问候语(evt){
evt.preventDefault();
设el=evt.target;
让cursorPos=el.selectionStart;
el.value=el.value.replace('.','');
el.设置选择范围(cursorPos,cursorPos);
}
}
});代码>
模型:{{value}}
嗯,我想我找到了一个足够干净的解决方案。
在方法代码的末尾,我只需要添加:
el.dispatchEvent(新事件(“输入”)代码>
Vue将根据元素值更改模型
如果有任何缺点,请在评论中告诉我