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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

4755閲覧

Javascriptで、for文で複数idを取得し出力する方法

tensai

総合スコア8

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2020/03/02 13:40

編集2020/03/04 13:24

Javascriptの勉強中です。
実現したいことは2つあります。
一つ目はfor文で複数のidを取得し、コードを短くしたい。
二つ目はそのidを使ってif文で使いたい。
色々試しましたが、出力結果がundefinedばかり出ます。
どなたかわかる方がいらっしゃいましたらご教示お願いします。

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

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

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

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

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

yambejp

2020/03/02 13:52

結局何をしたいのでしょうか id=user1~10の値が数値であることを確認できればよい? なにかグルーピング用のclassは設定してはいけないのでしょうか?
H40831

2020/03/02 13:58 編集

基本的なことですが、 ooo.value みたいなものがundefinedだった場合、そもそもの ooo が取得できているのかどうかを確認するのがセオリーです。 console.log( ooo )で表示されるものが、自分が取得したかったものかどうか確認してください。 あと、配列のインデックス番号は 0 から始まるので、10個目にアクセスしたかったら [9] と入力するものだというのは理解されてますか? まずはそのあたりをヒントに、ご自身でチェックしてみてください。
tensai

2020/03/02 14:07

グルーピング用のclassを設定するのはいけます! その方法を知りませんでした。一度調べてみます。
退会済みユーザー

退会済みユーザー

2020/03/02 14:08

[id^=user] とか前方一致属性セレクタでどうにかなるじゃろ
tensai

2020/03/02 14:09

console.logで取得は確認できました。 インデックス番号についても理解していたつもりでしたが間違えていました。 有難うございます。
tensai

2020/03/02 14:15

前方一致属性セレクタ、一度調べてみます 有難うございます。
guest

回答3

0

ベストアンサー

user1.value === "" || user2.value === "" || user3.value === "" || user4.value === "" || user5.value === "" || user6.value === "" || user7.value === "" || user8.value === "" || user9.value === "" || user10.value === ""

は、user1~10までのどれか一つでもtrueなら成立。
userValueArrayみたいなのつくっておいて
userValueArray.includes("");
でいい

で、冷静に考えてHTMLのIDそんなに乱立しなくていい。
<input type="text" class="js-user" maxlength="1" onchange="wupBtn()"> //user1
<input type="text" class="js-user" maxlength="1" onchange="wupBtn()"> //user2
<input type="text" class="js-user" maxlength="1" onchange="wupBtn()"> //user3
こんな感じでclassに変えていい。

取得はこう。
var userArray = document.getElementsByClassName("js-user"); //=>Arrayっぽいもの
配列っぽい感じだから、ループか要素指定で触るのが丸い。

ボタンは、element[10]みたいにして触るより、直接触った方がいい。
なぜか。elementが増えるたびにコードを修正する必要があるのはしんどいからだ。
var button = document.getElementByID("button");

投稿2020/03/03 02:48

編集2020/03/03 02:56
sansansandodo

総合スコア248

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

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

0

inputをグルーピングして一桁の数字かどうかチェック

投稿2020/03/03 01:09

yambejp

総合スコア116724

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

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

yambejp

2020/03/03 01:09

<script> window.addEventListener('DOMContentLoaded', ()=>{ var users=document.querySelectorAll('.users') users.forEach(x=>{ x.addEventListener('input',()=>{ var l1=[...users].filter(x=>x.value=="").length; var l2=[...users].filter(x=>x.value.match(/^\d$/)).length; var l3=[...users].filter(x=>x.value.match(/[^\d]|\d{2,}/)).length; document.querySelector('#view').textContent=` 空:${l1} 正しい:${l2} 間違い:${l3} `; }); }); }); </script> <input type="text" id="user1" class="users"><br> <input type="text" id="user2" class="users"><br> <input type="text" id="user3" class="users"><br> <input type="text" id="user4" class="users"><br> <input type="text" id="user5" class="users"><br> <input type="text" id="user6" class="users"><br> <input type="text" id="user7" class="users"><br> <input type="text" id="user8" class="users"><br> <input type="text" id="user9" class="users"><br> <input type="text" id="user10" class="users"><br> <div id="view"></div>
guest

0

こんにちは

一案として、以下のようにしてみると、いかがでしょうか?

  • <input type="text"> のいずれかに、何か文字を入力したり、文字を消去したりすると即座に入力チェックするように、 inputイベントにコールバックを設定する。

  • 入力チェックでは、以下のようにエラーが判定される。

・各<input type="text"> に入力されている値のすべてが半角数字1個である場合、正しい入力と判定される。
・上記以外においてはエラーと判断され、ボタンがdisabled になり、赤字でエラーと表示される。

以下は、上記をコードにしたものです。

javascript

1const inputs = [...document.querySelectorAll('input[type="text"]')]; 2const button = document.querySelector('input[type="button"]'); 3const error = document.querySelector('#error'); 4 5const check = () => { 6 const valid = inputs.every(e => /[0-9]/.test(e.value)); 7 button.disabled = !valid; 8 error.textContent = valid ? "" : "エラー"; 9} 10 11inputs.forEach(input => { 12 input.addEventListener('input', check); 13});

div#error には、CSSで赤字を設定しておきます。

css

1#error { color: red; }

何か、意図通りではない点があれば、コメントからお知らせください。
以上、参考になれば幸いです。

備考

上記のコードの中で使っている正規表現 /[0-9]//^[0-9]$/ とする必要がない理由は、各 input要素に、 maxlength="1" があるので、入力される文字列の長さが最大1であることが事前に分かっているからです。

投稿2020/03/02 20:54

編集2020/03/02 21:44
jun68ykt

総合スコア9058

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問