작성자: ospace114@empal.com, http://ospace.tistory.com/
속성
- size: 숫자 입력 개수
사용예
<InputNumbers :size="3" v-model="myNumbers"></InputNumbers>
소스코드
<template>
<div ref="inputNumbers">
<input type="text" class="input-numbers" maxlength="1" v-for="(id,idx) in size" v-model="data[idx]" @input="onInput($event, idx)" @click="onClick(idx)" :key="idx"/>
</div>
</template>
<script>
function applyTo(str, array) {
for(let i=0; i<array.length; ++i) {
array[i] = str.charAt(i);
}
return array;
}
export default {
props: {
value: {
type: String,
default: '',
},
size: {
type: Number,
default: 2,
}
},
data() {
return {
data: applyTo(this.value, new Array(this.size)),
};
},
computed: {
numbers() {
return this.$refs.inputNumbers.getElementsByClassName('input-numbers');
},
},
watch: {
value() {
applyTo(this.value, this.data);
},
data() {
this.$emit('input', this.data.join(''));
},
},
methods: {
onInput(ev, idx) {
let value = ev.target.value.replace(/[^0-9]/g, '');
this.data[idx] = value;
if (!value) return;
let numbers = this.numbers;
++idx < numbers.length && numbers[idx].select();
},
onClick(idx) {
this.numbers[idx].select();
},
}
}
</script>
<style scoped>
.input-numbers {
max-width: 12px;
}
</style>
반응형
'3.구현 > HTML5&Javascript' 카테고리의 다른 글
[vue2] 목록에서 체크박스 선택 처리 (0) | 2021.11.10 |
---|---|
[vue2] vuetify 팝업 모달창 사용 (0) | 2021.11.09 |
[vue2] 컴포넌트 사용하기 기본편 (0) | 2021.10.29 |
[vue2] 레이아웃 구성 (0) | 2021.10.27 |
[vue2] Router 활용한 접근제어 (0) | 2021.10.25 |