- 使用Vue 3.0.5*
我有一张表格:
<form id="app" @submit="onSubmit">
<input type="text">
<input type="text">
<button type="submit">submit</button>
</form>
和Vue组件:
Vue.createApp({
data() {
return {}
},
methods: {
onSubmit(e) {
e.preventDefault();
}
}
}).mount('#app');
并且似乎不能阻止页面在表单提交时重新加载。在上面的版本中,我在方法中使用了e.preventDefault()
。我还尝试了:
@submit.prevent
而不是手动调用e.preventDefault()
- 调用
e.preventDefault()
时出现v-on:submit
v-on:submit.prevent
,无需调用@submit.prevent
/v-on:submit.prevent
,同时手动调用
除了恢复到Vue 2,似乎什么都不起作用。也许是Vue 3的问题,或者是我错过的一些怪癖?
5条答案
按热度按时间8e2ybdfx1#
一种解决方法是将
form
Package 在另一个元素(如div
)中,并将其用作挂载点:os8fio9y2#
你可以让按钮类型为button,然后只做一个点击事件来做你想做的事情。这应该可以防止它重新加载
比如:
问题出在您的按钮类型上。如果您愿意,您也可以在按钮上而不是窗体上防止默认值。
j2qf4p5b3#
这可以正常工作。默认设置是这样阻止
@submit.prevent="onSubmit"
。在vue3应用程序上测试。
a8jjtwal4#
使用
@submit.prevent
而不使用e.preventDefault()
..vue2和3,两个版本都将自动处理事件传播。由于这是一个Comman事件,调用vue会为我们处理这个问题,而且还因为
methods()
假设用于数据逻辑而不是DOM操作参考-链接
e4eetjau5#
以下是使用Vue 3和Composition API的解决方案。请注意,此示例使用
<script setup>
和node。