Commit cec470ebd5808b155da0a23744626932b0613ced

Authored by Aresn
Committed by GitHub
2 parents 164f7bcb 457d6c69

Merge pull request #4315 from huanghong1125/input-number

update input-number
examples/routers/input-number.vue
@@ -54,7 +54,24 @@ @@ -54,7 +54,24 @@
54 <InputNumber v-model="value3" style="width: 200px" placeholder="Enter something..."></InputNumber> --> 54 <InputNumber v-model="value3" style="width: 200px" placeholder="Enter something..."></InputNumber> -->
55 55
56 56
57 - <InputNumber v-model="valueNull" style="width: 200px" :min='0' :max='10000' :precision='2' ></InputNumber> 57 + <InputNumber v-model="valueNull" style="width: 200px" :min='1' :max='10000' :precision='2' ></InputNumber>
  58 + <InputNumber v-model="valueNull" style="width: 200px" ></InputNumber>
  59 + <div style="margin:10px 0px">
  60 + <InputNumber :activeChange="false" v-model="valueNull" style="width: 200px" :min='1' :max='10000' :precision='2' ></InputNumber>
  61 + <InputNumber :activeChange="false" v-model="valueNull" style="width: 200px" ></InputNumber>
  62 + </div>
  63 + <div style="margin:10px 0px">
  64 + <InputNumber
  65 + :max="10000"
  66 + v-model="value9"
  67 + :formatter="value => `$ ${value}`.replace(/B(?=(d{3})+(?!d))/g, ',')"
  68 + :parser="value => value.replace(/\$s?|(,*)/g, '')"></InputNumber>
  69 + <InputNumber
  70 + :max="100"
  71 + v-model="value10"
  72 + :formatter="value => `${value}%`"
  73 + :parser="value => value.replace('%', '')"></InputNumber>
  74 + </div>
58 </div> 75 </div>
59 </template> 76 </template>
60 <script> 77 <script>
@@ -68,16 +85,18 @@ @@ -68,16 +85,18 @@
68 formatter: (value) => `$ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ','), 85 formatter: (value) => `$ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ','),
69 parser: (value) => value.replace(/\$\s?|(,*)/g, ''), 86 parser: (value) => value.replace(/\$\s?|(,*)/g, ''),
70 formatter2: (value) => `${value}%`, 87 formatter2: (value) => `${value}%`,
71 - parser2: (value) => value.replace('%', '')  
72 - } 88 + parser2: (value) => value.replace('%', ''),
  89 + value9: 1000,
  90 + value10: 100
  91 + };
73 }, 92 },
74 methods: { 93 methods: {
75 focus (e) { 94 focus (e) {
76 - e.target.select() 95 + e.target.select();
77 }, 96 },
78 change (v) { 97 change (v) {
79 - console.log(v) 98 + console.log(v);
80 } 99 }
81 } 100 }
82 - } 101 + };
83 </script> 102 </script>
src/components/input-number/input-number.vue
@@ -3,13 +3,11 @@ @@ -3,13 +3,11 @@
3 <div :class="handlerClasses"> 3 <div :class="handlerClasses">
4 <a 4 <a
5 @click="up" 5 @click="up"
6 - @mousedown="preventDefault"  
7 :class="upClasses"> 6 :class="upClasses">
8 <span :class="innerUpClasses" @click="preventDefault"></span> 7 <span :class="innerUpClasses" @click="preventDefault"></span>
9 </a> 8 </a>
10 <a 9 <a
11 @click="down" 10 @click="down"
12 - @mousedown="preventDefault"  
13 :class="downClasses"> 11 :class="downClasses">
14 <span :class="innerDownClasses" @click="preventDefault"></span> 12 <span :class="innerDownClasses" @click="preventDefault"></span>
15 </a> 13 </a>
@@ -82,6 +80,10 @@ @@ -82,6 +80,10 @@
82 type: Number, 80 type: Number,
83 default: 1 81 default: 1
84 }, 82 },
  83 + activeChange:{
  84 + type:Boolean,
  85 + default:true
  86 + },
85 value: { 87 value: {
86 type: Number, 88 type: Number,
87 default: 1 89 default: 1
@@ -252,7 +254,16 @@ @@ -252,7 +254,16 @@
252 setValue (val) { 254 setValue (val) {
253 // 如果 step 是小数,且没有设置 precision,是有问题的 255 // 如果 step 是小数,且没有设置 precision,是有问题的
254 if (val && !isNaN(this.precision)) val = Number(Number(val).toFixed(this.precision)); 256 if (val && !isNaN(this.precision)) val = Number(Number(val).toFixed(this.precision));
255 - 257 +
  258 + const {min, max} = this;
  259 + if (val!==null) {
  260 + if (val > max) {
  261 + val = max;
  262 + } else if (val < min) {
  263 + val = min;
  264 + }
  265 + }
  266 +
256 this.$nextTick(() => { 267 this.$nextTick(() => {
257 this.currentValue = val; 268 this.currentValue = val;
258 this.$emit('input', val); 269 this.$emit('input', val);
@@ -278,42 +289,32 @@ @@ -278,42 +289,32 @@
278 } 289 }
279 }, 290 },
280 change (event) { 291 change (event) {
  292 +
  293 + if (event.type == 'input' && !this.activeChange) return;
281 let val = event.target.value.trim(); 294 let val = event.target.value.trim();
282 if (this.parser) { 295 if (this.parser) {
283 val = this.parser(val); 296 val = this.parser(val);
284 } 297 }
285 -  
286 - if (event.type == 'input' && val.match(/^\-?\.?$|\.$/)) return; // prevent fire early if decimal. If no more input the change event will fire later  
287 -  
288 - const {min, max} = this; 298 +
289 const isEmptyString = val.length === 0; 299 const isEmptyString = val.length === 0;
290 - val = Number(val);  
291 -  
292 if(isEmptyString){ 300 if(isEmptyString){
293 this.setValue(null); 301 this.setValue(null);
294 return; 302 return;
295 } 303 }
296 - if (event.type == 'change'){  
297 - if (val === this.currentValue && val > min && val < max) return; // already fired change for input event  
298 - } 304 + if (event.type == 'input' && val.match(/^\-?\.?$|\.$/)) return; // prevent fire early if decimal. If no more input the change event will fire later
  305 +
  306 + val = Number(val);
299 307
300 - if (!isNaN(val) && !isEmptyString) { 308 + if (!isNaN(val)) {
301 this.currentValue = val; 309 this.currentValue = val;
302 -  
303 - if (event.type == 'input' && val < min) return; // prevent fire early in case user is typing a bigger number. Change will handle this otherwise.  
304 - if (val > max) {  
305 - this.setValue(max);  
306 - } else if (val < min) {  
307 - this.setValue(min);  
308 - } else {  
309 - this.setValue(val);  
310 - } 310 + this.setValue(val);
311 } else { 311 } else {
312 event.target.value = this.currentValue; 312 event.target.value = this.currentValue;
313 } 313 }
314 }, 314 },
315 changeVal (val) { 315 changeVal (val) {
316 val = Number(val); 316 val = Number(val);
  317 + //this.setValue(val);
317 if (!isNaN(val)) { 318 if (!isNaN(val)) {
318 const step = this.step; 319 const step = this.step;
319 320