在vuejs 2.5表格上按键以隐藏错误

时间:2018-01-02 16:48:36

标签: key vuejs2

在我的vuejs 2.5表单中,我出现错误时出现了颜色错误

                    <label class="col-xs-12 col-sm-4 control-label">Name<span class="required"> * </span></label>
                    <div class="col-xs-12 col-sm-8">
                        <input type="text" v-model="newUserTaskType.name" v-bind:class="{'form-control':true, 'text-warning': errorsList.name}"
                               placeholder="Enter unique name of new user's task type" >
                        <small v-if="errorsList.name" class="text-warning">{{ errorsList.name[0] }}</small>
                    </div>

我想在输入错误的情况下按下大小写按键清除此彩色范围。 当我使用Jquery时,我写了一个像

这样的函数
setErrorKeypress: function () {
    $(".text-warning").bind('keypress', function () {
        $(this).removeClass("text-warning");
        ...

但是如果erorr span有文本警告类,它现在不会被触发。

我找到了一个关键的处理程序,如:

  <input v-on:keydown="keyhandler" />

但我不喜欢在任何输入定义中设置事件的方法。

你能给出一个参考/提示,以这种方式实现吗?

谢谢!

您好, 让我再问2个关于这个主题的问题: 我使用VeeValidate进行表单验证,它运行正常。 但是我决定使用slot重新编写我的编辑器,比如资源/ assets / js / components / lib / FormHelper.vue:

<template>
    <section>
        <div class="panel panel-default">
            <div id="form-header">
                <h3>Fill the form:FormHelper.vue</h3>
                <editor-header :show_loading_image="!is_page_loaded || is_page_updating" :header_title=title :message=message></editor-header>
            </div>

            <form @submit.prevent="validateBeforeSubmit" id="form_document_category_edit" class="form-horizontal">
                <div id="form-editable-fields">
                    <slot name="form-editable-fields"></slot>
                </div>

                <div id="form-button-controls">
                    <slot name="form-button-controls">
                        <div class="row pull-right">
                            <editor-buttons submit_label="Update" cancel_label="Cancel" :is_page_updating="is_page_updating"></editor-buttons>
                        </div>
                    </slot>
                </div>
            </form>

        </div>

    </section>
</template>

<script>
    import appMixin from '../../appMixin';

    export default{
        created() {
        },

        mixins : [appMixin],

        mounted() {
        },  // mounted() {


        methods: {
            validateBeforeSubmit() {
                alert( "validateBeforeSubmit::"+var_dump(-1) )
                this.$validator.validateAll().then((result) => {
                    if (result) {
                        alert( "Validated::"+(-9) )
                        this.updateDocumentCategory()
                        return;
                    }
                    alert( "False::"+(0) )
                })
            }, // validateBeforeSubmit() {
        }, // methods: {

        data(){
            return{
                title : 'Default Title',
                message : '',
                is_page_loaded:false,
                is_page_updating:false,
            }
        },
    }
</script>

并在resources / assets / js / components / user_task_types / UserTaskTypesCreate.vue中使用此助手:

<template>
    <section>

        <form-helper  title="Password Reset" >

            <div slot="form-editable-fields">

                <div class="row">
                    <div class="col-xs-12 form-group">
                        <label class="col-xs-12 col-sm-4 control-label">Name<span class="required"> * </span></label>
                        <div class="col-xs-12 col-sm-8">
                            <input name="name" v-validate="'required'" type="text" v-model="newUserTaskType.name"
                                   :class="{ 'form-control':true, 'input': true, 'text-danger': vueErrorsList.has('name') }"
                                   placeholder="Enter unique name of new user's task type">
                            <span v-show="vueErrorsList.has('name')" class="text-danger">{{ vueErrorsList.first('name') }}</span>

                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-xs-12 form-group">
                        <label class="col-xs-12 col-sm-4 control-label">Description<span class="required"> * </span></label>
                        <div class="col-xs-12 col-sm-8">
                            <textarea name="description" v-validate="'required'" v-model="newUserTaskType.description" rows="10"
                                      :class="{ 'form-control':true, 'input': true, 'text-danger': vueErrorsList.has('description') }"
                                      placeholder="Enter description of new user's task type"></textarea>
                            <span v-show="vueErrorsList.has('description')" class="text-danger">{{ vueErrorsList.first('description') }}</span>
                        </div>
                    </div>
                </div>

            </div> <!-- <div slot="form-editable-fields -->


        </form-helper>

    </section>
</template>


<script>
    import appMixin from '../../appMixin';

    import formHelper from '../lib/FormHelper.vue';  // resources/assets/js/components/lib/FormHelper.vue

    export default{
        components: {
            'form-helper': formHelper,
        },

        created() {
        },

        mixins : [appMixin],

        mounted() {
            this.setUserTaskTypeDefaultValue();
            this.loadUserTaskTypeDictionaries()
        },  // mounted() {

        data(){
            return{
                header_title : 'Create new user\'s task type',
                newUserTaskType:{
                    name:'',
                    description:'',
                },
                errorsList:[],
                message:'',
            }
        },
        methods:{

            createUserTaskType() {
                this.is_page_updating= true

                axios.post(window.API_VERSION_LINK + '/user_task_types', this.newUserTaskType).then((response) => {
                    this.errorsList= [];
                    this.is_page_updating= false
                    this.newUserTaskType = []
                    this.$router.push({path: '/'});
                }).catch((error) => {
                    this.$setLaravelValidationErrorsFromResponse(error.response.data);
                    this.is_page_updating= false
                    this.showRunTimeError(error, this);
                });

            }, // createUserTaskType() {

            setUserTaskTypeDefaultValue() {
                this.newUserTaskType.name= '';
                this.newUserTaskType.description= '';
            },

            loadUserTaskTypeDictionaries() {
                this.is_page_loaded = true
            }, // loadDocumentCategoryDictionaries() {


        }
    }
</script>

1)当我点击带有必需选项的字段时,我收到错误消息, bluring输入我收到错误消息,因为输入在UserTaskTypesCreate.vue文件中。

但是当我点击提交功能时(调用validateBeforeSubmit) 验证无法正常工作。看起来帮助器中的验证对象与验证对象不同 UserTaskTypesCreate.vue表单。如果有一种方法可以在表单和帮助器中使用相同的验证对象吗?

2)助手的变量具有默认值

 title : 'Default Title',

调用for我将title属性设置为:

<form-helper  title="Password Reset" >

但它不起作用,我看到默认值。哪种方法正确?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,您需要通过验证来捕获每个输入的关键新闻事件。

按下输入时删除text-warning课程可能有误。

您可能对该输入有验证规则,用户输入错误。因此,您向用户发出错误消息警告。在这种情况下,如果在按键时删除错误类,则用户可能看起来不对。当用户输入正确的输入时,最好将其删除。

我使用VeeValidate来验证Vue的输入。这将更容易并节省时间。