fix(scroll): fix JS error when scrolling text input

This commit is contained in:
Adam Bradley
2015-11-16 16:35:59 -06:00
parent df3a59dc81
commit 3ec39c51b5
4 changed files with 110 additions and 84 deletions

View File

@ -6,7 +6,6 @@ import {Keyboard} from '../../util/keyboard';
import {ViewController} from '../nav/view-controller';
import {Animation} from '../../animations/animation';
import {ScrollTo} from '../../animations/scroll-to';
import {FeatureDetect} from '../../util/feature-detect';
/**
* The Content component provides an easy to use content area that can be configured to use Ionic's custom Scroll View, or the built in overflow scrolling of the browser.
@ -72,14 +71,16 @@ export class Content extends Ion {
}
}
onScrollEnd(callback) {
onScrollEnd(callback, debounceWait=400) {
let timerId, deregister;
function debounce() {
console.debug('onScroll')
clearTimeout(timerId);
timerId = setTimeout(() => {
deregister();
callback();
}, 250);
}, debounceWait);
}
deregister = this.addScrollEventListener(debounce);

View File

@ -4,4 +4,10 @@ import {App} from 'ionic/ionic';
@App({
templateUrl: 'main.html'
})
class E2EApp {}
class E2EApp {
submit(ev) {
debugger
}
}

View File

@ -4,6 +4,8 @@
<ion-content>
<form (ng-submit)="submit($event)">
<ion-list>
<ion-input>
@ -76,4 +78,6 @@
</ion-list>
</form>
</ion-content>

View File

@ -87,7 +87,7 @@ export class TextInput {
self.deregListeners();
if (self.hasFocus) {
//self.input.hideFocus();
}
};
}
@ -315,6 +315,9 @@ export class TextInput {
*/
focusChange(hasFocus) {
this.renderer.setElementClass(this.elementRef, 'has-focus', hasFocus);
if (!hasFocus) {
this.deregListeners();
}
}
/**
@ -419,25 +422,19 @@ export class TextInputElement {
}
relocate(shouldRelocate, inputRelativeY) {
this.clone(shouldRelocate, inputRelativeY);
if (this._relocated !== shouldRelocate) {
if (shouldRelocate) {
this.wrapper.setFocus();
}
}
clone(shouldClone, inputRelativeY) {
let focusedInputEle = this.getNativeElement();
if (shouldRelocate) {
let clonedInputEle = focusedInputEle.cloneNode(true);
clonedInputEle.classList.add('cloned-input');
clonedInputEle.setAttribute('aria-hidden', true);
clonedInputEle.tabIndex = -1;
focusedInputEle.parentNode.insertBefore(clonedInputEle, focusedInputEle);
focusedInputEle.classList.add('hide-focused-input');
focusedInputEle.style[dom.CSS.transform] = `translate3d(-9999px,${inputRelativeY}px,0)`;
focusedInputEle.parentNode.insertBefore(clonedInputEle, focusedInputEle);
this.wrapper.setFocus();
} else {
focusedInputEle.classList.remove('hide-focused-input');
@ -447,6 +444,24 @@ export class TextInputElement {
clonedInputEle.parentNode.removeChild(clonedInputEle);
}
}
this._relocated = shouldRelocate;
}
}
hideFocus() {
console.debug('hideFocus');
let focusedInputEle = this.getNativeElement();
let hiddenInputEle = focusedInputEle.parentNode.querySelector('.cloned-hidden');
if (!hiddenInputEle) {
hiddenInputEle = focusedInputEle.cloneNode(true);
hiddenInputEle.classList.add('cloned-hidden');
hiddenInputEle.setAttribute('aria-hidden', true);
hiddenInputEle.tabIndex = -1;
focusedInputEle.parentNode.appendChild(hiddenInputEle);
}
hiddenInputEle.focus();
}
get hasFocus() {