尝试将 Vue JS 与语义 UI 集成时不会阻止表单提交
Form submit is not prevented when trying to integrate VueJS with SemanticUI
我正在尝试将 SemanticUI 与 Vue 集成,并且我有一个带有表单的登录组件。
我已将 v-on:submit.prevent="onSubmit"
添加到表单中,但是当我在表单的其中一个字段上按 Enter 时,表单仍然提交并且我的方法从未被调用。
基本上我要做的是从 jQuery.
复制 on("submit"
事件
知道问题出在哪里吗?
main.js
import Vue from "vue";
import VueRouter from "vue-router";
import App from "./App";
Vue.use(VueRouter);
new Vue({
el : "#app",
template : "<App/>",
components: { App }
});
和Login.vue
<template>
<div class="ui middle aligned center aligned grid">
<div class="column">
<h2 class="ui teal header">
Login
</h2>
<form class="ui large form login" v-on:submit.prevent="onSubmit">
<div class="ui stacked segment">
<div class="field">
<div class="ui left icon input">
<i class="cloud icon"></i>
<input type="text" name="hostname" placeholder="Hostname" value="">
</div>
</div>
<div class="field">
<div class="ui left icon input">
<i class="user icon"></i>
<input type="text" name="username" placeholder="Username" value="">
</div>
</div>
<div class="field">
<div class="ui left icon input">
<i class="lock icon"></i>
<input type="password" name="password" placeholder="Password" value="">
</div>
</div>
<div class="ui fluid large teal submit button">Login</div>
</div>
</form>
</div>
</div>
</template>
<script>
export default {
name: "login",
mounted: function() {
this.$nextTick(function() {
jQuery(this.$el).find("form").form({
fields: {
hostname: {
identifier: "hostname",
rules : [{
type : "empty",
prompt: "Please enter the instance hostname"
}]
},
username: {
identifier: "username",
rules : [{
type : "empty",
prompt: "Please enter your username"
}]
},
password: {
identifier: "password",
rules : [{
type : "empty",
prompt: "Please enter your password"
}]
}
}
});
});
},
methods: {
onSubmit: function(e) {
alert("ok");
}
}
};
</script>
如果表单具有以下之一,则按 ENTER 键提交:
- 一个
button
里面,没有type="button"
- 带有
type="submit"
的 input
标签
您的表格似乎没有以上任何一项。但是假设您在其他地方有一个提交按钮,这里是您可以避免表单提交的方法:
<form onsubmit="return false;">
<input type="text" placeholder="Host Name" v-model="hostName">
<input type="text" placeholder="User Name" v-model="userName">
<input type="password" placeholder="Password" v-model="password">
<input type="submit" value="Submit form">
</form>
请注意,表单具有 onsubmit="return false;"
以防止意外提交。
这不会阻止您使用 Vue 组件中的方法,通过使用 @click="submitLoginForm()"
的按钮启动,使用 this.$http.post(...)
进行提交
我正在尝试将 SemanticUI 与 Vue 集成,并且我有一个带有表单的登录组件。
我已将 v-on:submit.prevent="onSubmit"
添加到表单中,但是当我在表单的其中一个字段上按 Enter 时,表单仍然提交并且我的方法从未被调用。
基本上我要做的是从 jQuery.
复制on("submit"
事件
知道问题出在哪里吗?
main.js
import Vue from "vue";
import VueRouter from "vue-router";
import App from "./App";
Vue.use(VueRouter);
new Vue({
el : "#app",
template : "<App/>",
components: { App }
});
和Login.vue
<template>
<div class="ui middle aligned center aligned grid">
<div class="column">
<h2 class="ui teal header">
Login
</h2>
<form class="ui large form login" v-on:submit.prevent="onSubmit">
<div class="ui stacked segment">
<div class="field">
<div class="ui left icon input">
<i class="cloud icon"></i>
<input type="text" name="hostname" placeholder="Hostname" value="">
</div>
</div>
<div class="field">
<div class="ui left icon input">
<i class="user icon"></i>
<input type="text" name="username" placeholder="Username" value="">
</div>
</div>
<div class="field">
<div class="ui left icon input">
<i class="lock icon"></i>
<input type="password" name="password" placeholder="Password" value="">
</div>
</div>
<div class="ui fluid large teal submit button">Login</div>
</div>
</form>
</div>
</div>
</template>
<script>
export default {
name: "login",
mounted: function() {
this.$nextTick(function() {
jQuery(this.$el).find("form").form({
fields: {
hostname: {
identifier: "hostname",
rules : [{
type : "empty",
prompt: "Please enter the instance hostname"
}]
},
username: {
identifier: "username",
rules : [{
type : "empty",
prompt: "Please enter your username"
}]
},
password: {
identifier: "password",
rules : [{
type : "empty",
prompt: "Please enter your password"
}]
}
}
});
});
},
methods: {
onSubmit: function(e) {
alert("ok");
}
}
};
</script>
如果表单具有以下之一,则按 ENTER 键提交:
- 一个
button
里面,没有type="button"
- 带有
type="submit"
的
input
标签
您的表格似乎没有以上任何一项。但是假设您在其他地方有一个提交按钮,这里是您可以避免表单提交的方法:
<form onsubmit="return false;">
<input type="text" placeholder="Host Name" v-model="hostName">
<input type="text" placeholder="User Name" v-model="userName">
<input type="password" placeholder="Password" v-model="password">
<input type="submit" value="Submit form">
</form>
请注意,表单具有 onsubmit="return false;"
以防止意外提交。
这不会阻止您使用 Vue 组件中的方法,通过使用 @click="submitLoginForm()"
的按钮启动,使用 this.$http.post(...)