Reputation: 19203
I'm trying to integrate SemanticUI with Vue and I have a Login component with a form in it.
I've added v-on:submit.prevent="onSubmit"
to the form but when I press enter on one of the form's fields the form still submits and my method ie never called.
Basically what I'm trying to do is replicate the on("submit"
event from jQuery.
Any idea what's the problem?
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 }
});
and 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>
Upvotes: 1
Views: 2797
Reputation: 24265
A form will submit on ENTER key if it has one of the following:
button
inside, without type="button"
input
tag with type="submit"
Your form does not seem to have either of the above. But assuming you have a submit button elsewhere, here is how you can avoid form submit:
<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>
Note that the form has onsubmit="return false;"
which prevents accidental submission.
This does not stop you from using a method in Vue component, initiated via a button using @click="submitLoginForm()"
, to do the submission using this.$http.post(...)
Upvotes: 3