尝试将 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(...)

进行提交