账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Vue自定义指令,input获取焦点时触发按钮键盘事件
    46
    0

    实现效果: 当input获取焦点时,点击按钮'+'和'上键',按钮'-'和'下键'分别使input里的数字+1和-1
    出现效果: 鼠标点击'-'再按'下键'数字才减,鼠标点击'+'再按'上键'数字才加

    父组件:
    <div id="app">
        <input-number v-model="value" :max="10" :min="0"></input-number>
    </div>
    子组件:
    Vue.component('input-number', {
        template:'\
            <div class="input-number">\
                <input type="text"\
                    :value="currentValue"\
                    @change="handleChange"\
                    v-focus="focus">\
                <button\
                    @click.keyup.down="handleDown"\
                    :disabled="currentValue <= min">-</button>\
                <button\
                    @click.keyup.up="handleUp"\
                    :disabled="currentValue >= max">+</button>\
            </div>',
     props: {
            max: {
                type: Number,
                default: Infinity
            },
            min: {
                type: Number,
                default: -Infinity
            },
            value: {
                type: Number,
                default: 0
            }
        },
        data: function () {
            return {
                currentValue: this.value
            }
        },
        watch: {
            currentValue: function (val) {
                this.$emit('input', val);
                this.$emit('on-change', val);
            },
            value: function (val) {
                this.updateValue(val);
            }
        },
        methods: {
            handleDown: function () {
                console.log('下键')
                // if (this.currentValue <= this.min) return;
                // this.currentValue -= 1;
            },
            handleUp: function () {
                console.log('上键')
                // if (this.currentValue >= this.max) return;
                // this.currentValue += 1;
            },
            updateValue: function (val) {
                if (val > this.max) val = this.max;
                if (val < this.min) val = this.min;
                this.currentValue = val;
            },
            handleChange: function (event) {
                var val = event.target.value.trim();
                var max = this.max;
                var min = this.min;
    
                if (isValueNumber(val)) {
                    val = Number(val);
                    this.currentValue = val;
    
                    if (val > max) {
                        this.currentValue = max;
                    } else if(val < min) {
                        this.currnetValue = min;
                    }
                } else {
                    event.target.value = this.currentValue;
                }
            }
        },
        mounted: function () {
            this.updateValue(this.value);
        }
    

    必须要自定义指令吗?通过操作具体元素才能实现吗?
    怎么实现求大神帮助!!!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 王者荣耀名字男 普通会员 1楼

      在Vue中,你可以使用自定义指令和input事件来获取焦点并触发按钮键盘事件。以下是一个简单的例子:

      ```html

      ```

      在这个例子中,我们创建了一个自定义指令v-model,它用于监听input元素的值。当input元素的值发生变化时,v-model会自动更新input元素的值。我们还定义了一个名为handleClick的方法,它会在点击按钮时被调用。

      然后,我们在模板中使用v-model@input指令来监听input元素的值,并在输入框中添加了一个按钮。当input框的值发生变化时,handleClick方法会被调用,这将触发按钮的键盘事件。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部