Browse Source

Pagination: reset invalid jumper value (#8408)

* fix pagination jumper value

* fix lint
Decade 7 years ago
parent
commit
7120490d3e
2 changed files with 44 additions and 1 deletions
  1. 11 0
      packages/pagination/src/pagination.js
  2. 33 1
      test/unit/specs/pagination.spec.js

+ 11 - 0
packages/pagination/src/pagination.js

@@ -223,6 +223,17 @@ export default {
         handleChange(value) {
           this.$parent.internalCurrentPage = this.$parent.getValidCurrentPage(value);
           this.oldValue = null;
+          this.resetValueIfNeed(target);
+        },
+        resetValueIfNeed(target) {
+          const num = parseInt(target.value, 10);
+          if (!isNaN(num)) {
+            if (num < 1) {
+              target.value = 1;
+            } else {
+              this.reassignMaxValue(target);
+            }
+          }
         },
         reassignMaxValue(target) {
           if (+target.value > this.$parent.internalPageCount) {

+ 33 - 1
test/unit/specs/pagination.spec.js

@@ -226,6 +226,7 @@ describe('Pagination', () => {
 
     setTimeout(() => {
       expect(vm.page).to.equal(1);
+      expect(input.value).to.equal('1');
 
       changeValue(10000);
 
@@ -236,7 +237,38 @@ describe('Pagination', () => {
 
         setTimeout(() => {
           expect(vm.page).to.equal(1);
-          done();
+          expect(input.value).to.equal('1');
+
+          // 多次输入不在min-max区间内的数字
+          input.value = 0;
+          triggerEvent(input, 'change');
+          setTimeout(()=>{
+            expect(vm.page).to.equal(1);
+            expect(input.value).to.equal('1');
+
+            input.value = 0;
+            triggerEvent(input, 'change');
+            setTimeout(()=>{
+              expect(vm.page).to.equal(1);
+              expect(input.value).to.equal('1');
+
+              input.value = 1000;
+              triggerEvent(input, 'change');
+              setTimeout(()=>{
+                expect(vm.page).to.equal(10);
+                expect(input.value).to.equal('10');
+
+                input.value = 1000;
+                triggerEvent(input, 'change');
+                setTimeout(()=>{
+                  expect(vm.page).to.equal(10);
+                  expect(input.value).to.equal('10');
+
+                  done();
+                }, 50);
+              }, 50);
+            }, 50);
+          }, 50);
         }, 50);
       }, 50);
     }, 50);