質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

457閲覧

入力欄の内容を削除した際に後ろの入力欄にフォーカスさせる

..o

総合スコア28

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/01/12 05:56

編集2021/01/13 05:58

前提・実現したいこと

お世話になっております。
inputタグ4つを使って暗証番号の入力画面を作りたいのですが、
入力された際に次のinputの入力欄にフォーカス動きは以下のコードで実装でき、
次に入力内容を削除した際に、前のinput入力欄にフォーカスさせるという動きを実装したいのですがエラーが出てしまいます。
どこが間違っているかご指摘いただけますと有り難いです。

html

1<input type="password" name="password" id="password01" maxlength="1" onkeyup="moveOnMax(this,'password02')"> 2<input type="password" name="password" id="password02" maxlength="1" onkeyup="moveOnMax(this,'password03')"> 3<input type="password" name="password" id="password03" maxlength="1" onkeyup="moveOnMax(this,'password04')"> 4<input type="password" name="password" id="password04" maxlength="1">

javascript

1moveOnMax = function (field, nextFieldID) { 2 if (field.value.length == 1) { 3 document.getElementById(nextFieldID).focus(); 4 5 }

試したこと

javascript

1moveOnMax = function (field, nextFieldID,prevFieldeID) { 2 if (field.value.length == 1) { 3 document.getElementById(nextFieldID).focus(); 4 } else if (field.value.length < 1) { 5 document.getElementById(prevFieldID).focus(); 6 } 7 }

HTML

1<input type="password" name="password" id="password01" maxlength="1" 2 onkeyup="moveOnMax(this,'password02','password01')"> 3<input type="password" name="password" id="password02" maxlength="1" 4 onkeyup="moveOnMax(this,'password03','password01')"> 5<input type="password" name="password" id="password03" maxlength="1" 6 onkeyup="moveOnMax(this,'password04','password02')"> 7<input type="password" name="password" id="password04" maxlength="1" 8 onkeyup="moveOnMax(this,'password04','password03')">

入力後、次のフィールドへのフォーカスすることができなくなりました。
また、エラーは無くなりましたが、else ifの方にconsole.logでprevFieldeIDを出力すると、入力した際にもコンソールにprevFieldeIDの値が出力されてしまっています。
else ifの内容も else if (field.value.length < 1)に変えたのですが、このif分の指定がそもそも間違っているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2021/01/12 06:20

エラーが出るのはどういうタイミングですか? 1番目のフィールドでキーを離したとき?
..o

2021/01/12 06:25

一番左のフィールドに入力した際と二番目に入力した際、三番目、二番目、一番目を削除した際にこのエラーが出ます。
guest

回答3

0

ベストアンサー

フィールドの値を削除した際のエラーは、

javascript

1 let prevFieldeID = Number(prevFielde-2); 2 document.getElementById("password0" + String(prevFieldeID - 2)).focus();

このコードで、引数のnextFieldIDの末尾の数値から合計4を減じているのが原因です。2を減じる意図でしょう。

入力した際のエラーの原因はぱっと見てわかりませんが、開発者ツールでステップ実行してみたり、2つある document.getElementById() の行の前でその引数をconsole.log()で確認してみると何かわかりそうです。

自分なら、「nextFieldIDから2を引いて前のフィールドIDを求める」という設計にはせず、「moveOnMax()に新たにprevFieldID引数を足す」とか、「DOMツリー上の前後のinput[type=password]を探す」とかすると思います。

投稿2021/01/12 06:43

int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

..o

2021/01/12 06:47

ご回答ありがとうございます。 確かに新しい引数を渡した方が早いですね。視野が狭くなっておりました。ありがとうございます。
guest

0

String(prevFieldeID - 2)Number(prevFielde-2)で既に2引いているので、String(prevFieldeID)でいいのでは? と思いました。

投稿2021/01/12 06:30

Lhankor_Mhy

総合スコア36960

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

..o

2021/01/12 06:44

ご回答ありがとうございます。 申し訳ありません、いろいろ試していたので重複しました。 修正したところ、入力した後次のフィールドにフォーカスする動きも止まってしましました。
Lhankor_Mhy

2021/01/12 06:49

質問の変更拝読。当方の環境では「入力した後次のフィールドにフォーカスする動きも止まって」という問題は再現しませんでした。 ご提示いただいていない部分のコードが原因かと思います。
..o

2021/01/12 07:03

ありがとうございます。もう一度確認してみます。
guest

0

コードのどこかが間違っていた様で、皆様にご回答いただいたコードで通りました。ありがとうございます。

投稿2021/01/26 08:54

..o

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問