zoukankan      html  css  js  c++  java
  • [记录] Vue中的dom操作

    使用过Vue的同学都应该有这样一个感觉,在vue中页面是基于数据驱动的,不需要我们自己操作dom,框架帮我们完成了这一步,事实上Vue官方也建议我们这样做

    在绝大多数情况下是不需要操作dom就可以完成效果的,但是在极少数情况下需要我们操作dom,例如以下情况

    我有如下一个表单,但用户点击提交时,校验表单各字段是否为空,如果为空,则让该字段输入框背景色为红色,同时获得焦点

    如果使用jquery,我们可以给每个输入框一个id值,然后判断字段值为空时根据id获取元素,然后设置背景色等

    这样做的话意味着需要给每一个元素一个id,同时需要逐个判断,如果字段值多的情况下需要写很多if分支

    并且因为要让文本框获得焦点,我们就必须要拿到该文本框,然后调用focus方法

    所以问题的难点还是在于如何拿到该元素

    Vue指令(directive)给我们提供了另一种解决方案

            <form action="#">
                <label for="name">
                    Your Name : <br>
                    <input type="text" name="name" v-model="person.name.val" v-my-directive="person.name">
                </label>
                <br>
                <label for="email">
                    Your Email : <br>
                    <input type="email" name="email" v-model="person.email.val" v-my-directive="person.email">
                </label>       
                <br>     
                <label for="address">
                    Your Address : <br>
                    <textarea name="address" id="address" cols="40" rows="5" v-model="person.address.val" v-my-directive="person.address"></textarea>
                </label>
                <br>
                <button @click.prevent="submit">提交</button>
            </form>
    //全局注册
    Vue.directive('my-directive', function (el, binding) {
        //获取指令的绑定值
        var obj = binding.value;
        if (obj != null) {
            //将改元素绑定到该对象的 el 属性上
            Vue.set(obj, key, 'el');
        }
    });
    
    
    var app = new Vue({
        el: '#app',
        data: {
            person : {
                name : { val : ''},
                address : { val : ''},
                email: { val : ''}
            }
        },
        methods: {
            submit: function() {
                for(var obj in this.person){
                    if(this.person[obj].val == ''){
                        this.person[obj].el.focus()
                        this.person[obj].el.style.backgroundColor="pink"
                        return 
                    }
                }
            }
        }
    })
  • 相关阅读:
    关于 php json float 出现很多位的问题
    做 Excel 的 XML schema.xsd
    笔记:Python 默认参数必须指向不变对象
    Bartender 使用 Excel xlsx 数据库时出现 0x800A0E7A
    Javascript 中 的 for ... in 和 for ... of 差别
    关于跨域资料收集 (2019-01-11)
    ThinkPHP3 和 ThinkPHP5 不是一个团队做的
    记录一下:给电推剪改锂电池
    为你的Web程序加个启动画面
    前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片
  • 原文地址:https://www.cnblogs.com/xiaoliwang/p/9719231.html
Copyright © 2011-2022 走看看