3つのテキスト入力を使用して電話番号のカスタム入力を作成し、keyCode
を使用して、ユーザーがデータを入力または削除するときに前後にカーソルを移動させます。あなたはそれが必要に応じて、自動的に次のフィールドにジャンプしますが、削除するときに戻って前のフィールドにジャンプしないタイプのようHere's a plunker to what I have.私は3つのテキスト入力を関数でナビゲートするのに助けが必要
これは、これまで
fieldJumper(event){
let a = this.first;
let b = this.second;
let c = this.third;
if(a.nativeElement.focus){
if(this.NumA.length >2){
if(event.keyCode !== 127 || event.keyCode !== 8 || event.keyCode !== 37){
b.nativeElement.focus();
}
}
}
if(b.nativeElement.focus){
if(this.NumB.length == 'null'){
if(event.keyCode === 127 || event.keyCode === 8 || event.keyCode === 37){
a.nativeElement.focus();
}
}
else if(this.NumB.length > 2){
if(event.keyCode !== 127 || event.keyCode !== 8 || event.keyCode !== 37){
c.nativeElement.focus();
}
}
}
if(c.nativeElement.focus){
if(this.NumC.length == 'null'){
if(event.keyCode === 127 || event.keyCode === 8 || event.keyCode === 37){
b.nativeElement.focus();
}
}
}
}
私の関数です。私は=
の金額を前後に使いこなしました。私はもともとthis.NumA == 'null'
ではなく、this.NumA.length < 1
だった。 plunkerで
あなたはこれがあれば、ユーザーが手動で選択する必要はありませんので、全くこれまでのエントリに基づいて選択することが適切なテキストフィールドを強制的に
selection(){
let a = this.first;
let b = this.second;
let c = this.third;
if(this.NumA.length < 1 && this.NumB.length < 1 && this.NumC.length < 1 && !event.keyCode)
{ a.nativeElement.focus(); }
if(this.NumA.length > 2 && this.NumB.length < 1 && this.NumC.length < 1 && !event.keyCode)
{ b.nativeElement.focus(); }
if(this.NumA.length > 2 && this.NumB.length > 2 && this.NumC.length < 1 && !event.keyCode)
{c.nativeElement.focus();}
}
にもこの機能が表示されますピンクの指を持つフィールド。私は、関数が互いに現時点で衝突するので、コメントアウトしています。だから私はまた、彼らが互いに戦うのを防ぐ方法を考えようとしています。バックスペースがなぜトリガしないのか、そしてこれら2つの機能をどのようにしてクラッシュさせないのかは誰にも分かりますか?
UPDATE
テンプレートに(keydown)
に切り替えると、それは削除が押されたとき、今第三から第二の入力にジャンプするが、それでも最初にジャンプしないkeycode
タイプミスを修正。
私は違いだけではなく、私がための条件を追加しようとした
if(this.NumB.length < 1){...}
//and
if(this.NumC.length < 1){...}
を有するのである。この
fieldJumper(event){
let a = this.first;
let b = this.second;
let c = this.third;
if(a.nativeElement.focus){
if(this.NumA.length >2){
if(event.keyCode !== 127 || event.keyCode !== 8 || event.keyCode !== 37){
b.nativeElement.focus();
}
}
}
if(b.nativeElement.focus){
if(this.NumB.length < 1 && this.NumA.length > 2){
if(event.keyCode === 127 || event.keyCode === 8 || event.keyCode === 37){
a.nativeElement.focus();
}
}
else if(this.NumB.length > 2){
if(event.keyCode !== 127 || event.keyCode !== 8 || event.keyCode !== 37){
c.nativeElement.focus();
}
}
}
if(c.nativeElement.focus){
if(this.NumC.length < 1 && this.NumB.length > 2){
if(event.keyCode === 127 || event.keyCode === 8 || event.keyCode === 37){
b.nativeElement.focus();
}
}
}
}
に私の機能を変更することによって、それが動作するようになったUPDATE 02
入力の状態はこのように切り替わります
if(this.NumB.length < 1 && this.NumA.length > 2){...}
//and
if(this.NumC.length < 1 && this.NumB.length > 2){...}
今や始めから終わりまで行きます。ここで問題になっているのは、他の関数のコメントを外して、fieldJumper()
関数を使わずに空のフィールドをクリックすると、最初の入力を強制的に選択することはありません。
更新03
私のタブレットがselection()
関数内の変数に.com
を追加判明。今は動作しますが、カーソルが後ろに飛ぶのを防ぎます。
いくつかの場所では、 'keyCode'ではなく' keycode'を書きます。もっと重要なのは、 'fieldJumper'で' input'イベントを処理することです。私はこのイベントに 'keyCode'メンバがあるとは思わない。 – ConnorsFan
良い目。私はちょうどそれらを変更し、それは問題を解決しませんでした。 '(入力)'の代わりに '(キー入力)'を使っていたのは、 'keyup'や' keydown'と 'input'はすべてのキーを取得する安全な方法でした。だから私はそこにそれを持っていたのです。私はちょうど '(keydown)'に戻り、同じ結果を得ています。 – Optiq
@Optiq '(input)=" fieldJumper($ event) "'は 'keyCode'を持つイベントを生成しません。あなたは 'console.log(イベント)'しようとしましたか?私はこれを見ます: '{" isTrusted ":true}'。 **あなたは '(keydown)'を使うべきです。** –