html选择数字组件,Vue: 数字输入框组件

index.html:

数字输入框组件

index.js:

var app = new Vue ({

el: '#app',

data: {

value: 5

}

});

input-number.js:

function isValueNumber (value) {

return (/(^-?[0-9]+\.{1}\d+$)|(^-?[1-9][0-9]*$)|(^-?0{1}$)/).test(value + '');

}

Vue.component('input-number', {

template: '\

\

type="text"\

:value="currentValue"\

@change="handleChange">\

@click="handleDown"\

:disabled="currentValue <= min">-

\

@click="handleUp"\

:disabled="currentValue >= max">+

\
',

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 () {

if (this.currentValue <= this.min) return;

this.currentValue -= 1;

},

handleUp: function () {

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.currentValue = min;

}

} else {

event.target.value = this.currentValue;

}

}

},

mounted: function () {

this.updateValue(this.value);

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值