2
0
mirror of https://github.com/tenrok/maska.git synced 2026-06-17 19:21:21 +03:00

Some fixes for number input type

This commit is contained in:
Alexander Shabunevich
2020-02-09 22:53:55 +03:00
parent f9b0fd81b1
commit 63aea135cd
6 changed files with 19 additions and 5 deletions
+4
View File
@@ -121,6 +121,10 @@ and with vanilla JS attribute, but make sure that mask value is proper `JSON`, s
<input data-mask='["# cm", "#.# cm", "#.## cm"]'> <input data-mask='["# cm", "#.# cm", "#.## cm"]'>
``` ```
## Known issues
When used on input of type `number` could have inconsistent behavior in different browsers. Use attribute `inputmode` if you just need a numeric keyboard for given input.
## Source of Inspiration ## Source of Inspiration
- [vue-the-mask](https://vuejs-tips.github.io/vue-the-mask/) - [vue-the-mask](https://vuejs-tips.github.io/vue-the-mask/)
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -118,7 +118,7 @@
</section> </section>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/vue@2.6/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/maska@1.1.2/dist/maska.js"></script> <script src="https://cdn.jsdelivr.net/npm/maska@1.1.3/dist/maska.js"></script>
<script> <script>
// vue // vue
new Vue({ new Vue({
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "maska", "name": "maska",
"version": "1.1.2", "version": "1.1.3",
"description": "Simple zero-dependency input mask for Vue.js and vanilla JS", "description": "Simple zero-dependency input mask for Vue.js and vanilla JS",
"keywords": [ "keywords": [
"mask", "mask",
+10 -1
View File
@@ -34,6 +34,7 @@ export default class Maska {
if (!el.dataset.maskInited) { if (!el.dataset.maskInited) {
el.dataset.maskInited = true el.dataset.maskInited = true
el.addEventListener('input', evt => this.updateValue(evt.target)) el.addEventListener('input', evt => this.updateValue(evt.target))
el.addEventListener('beforeinput', evt => this.beforeInput(evt))
} }
} }
} }
@@ -42,13 +43,15 @@ export default class Maska {
for (let i = 0; i < this._el.length; i++) { for (let i = 0; i < this._el.length; i++) {
const el = findInputElement(this._el[i]) const el = findInputElement(this._el[i])
el.removeEventListener('input', evt => this.updateValue(evt.target)) el.removeEventListener('input', evt => this.updateValue(evt.target))
el.removeEventListener('beforeinput', evt => this.beforeInput(evt))
delete el.dataset.mask delete el.dataset.mask
delete el.dataset.maskInited delete el.dataset.maskInited
} }
} }
updateValue (el) { updateValue (el) {
if (!el.value || !el.dataset.mask) return const wrongNum = el.type.match(/^number$/i) && el.validity.badInput
if ((!el.value && !wrongNum) || !el.dataset.mask) return
const position = el.selectionEnd const position = el.selectionEnd
const oldValue = el.value const oldValue = el.value
@@ -59,4 +62,10 @@ export default class Maska {
el.dispatchEvent(event('input')) el.dispatchEvent(event('input'))
} }
} }
beforeInput (e) {
if (e.target.type.match(/^number$/i) && e.data && isNaN(e.target.value + e.data)) {
e.preventDefault()
}
}
} }
+2 -1
View File
@@ -16,7 +16,8 @@ function fixInputSelection (el, position, digit) {
position++ position++
} }
if (el === document.activeElement) { const selectionRange = (el.type && el.type.match(/^(text|search|password|tel|url)$/i) || !el.type)
if (selectionRange && el === document.activeElement) {
el.setSelectionRange(position, position) el.setSelectionRange(position, position)
setTimeout(function () { setTimeout(function () {
el.setSelectionRange(position, position) el.setSelectionRange(position, position)