🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

jQuery

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

Q&A

解決済

3回答

1136閲覧

構文を簡単にする方法

kazuyaaan

総合スコア5

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/09/18 03:06

編集2019/09/18 03:29

前提・実現したいこと

すみません、超初心者です
こちらの構文を簡単にする方法を探しています。
同じ命令を繰り返しているのですが、IDとクラス名だけ変更してます
配列などを使えばいいのだと思いますが、いまいち理解できてません
どなたかご教示願えないでしょうか。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

jQuery(function ($) { $('#js-count01').keyup(function(){ var count = $(this).val().length; $('.show-count01').val(count); }); $('#js-count02').keyup(function(){ var count = $(this).val().length; $('.show-count02').val(count); }); $('#js-count03').keyup(function(){ var count = $(this).val().length; $('.show-count03').val(count); }); $('#js-count04').keyup(function(){ var count = $(this).val().length; $('.show-count04').val(count); }); });

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

html

<form> <label class="naire-txt"> 1<input type="text" name="naire-text-01" value="" size="40" class="" id="js-count01" aria-invalid="false" placeholder="エリア1に入れるテキストをご入力ください"></label> <label class="text-count"> 文字数<input type="text" name="text-count" value="" size="40" class="show-count01" aria-invalid="false" placeholder="自動入力"></label>

<label class="naire-txt"> 2<input type="text" name="naire-text-01" value="" size="40" class="" id="js-count02" aria-invalid="false" placeholder="エリア1に入れるテキストをご入力ください"></label>
<label class="text-count"> 文字数<input type="text" name="text-count" value="" size="40" class="show-count02" aria-invalid="false" placeholder="自動入力"></label>

</form>

<label class="naire-txt"> 3<input type="text" name="naire-text-01" value="" size="40" class="" id="js-count03" aria-invalid="false" placeholder="エリア1に入れるテキストをご入力ください"></label>
<label class="text-count"> 文字数<input type="text" name="text-count" value="" size="40" class="show-count03" aria-invalid="false" placeholder="自動入力"></label>

</form>

<label class="naire-txt"> 4<input type="text" name="naire-text-01" value="" size="40" class="" id="js-count02" aria-invalid="false" placeholder="エリア1に入れるテキストをご入力ください"></label>
<label class="text-count"> 文字数<input type="text" name="text-count" value="" size="40" class="show-count04" aria-invalid="false" placeholder="自動入力"></label>

</form>

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

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

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

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

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

kei344

2019/09/18 03:10

HTMLの構造も提示してください。
kei344

2019/09/18 03:32

(質問文は編集できます)質問文のHTMLもコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。 また、閉じタグの数が多いなどHTMLの構文として正しくない可能性が高いです。構文が正しくない場合JavaScriptでの操作にも影響があるため、なるべく正しい実際のコードを提示することをお勧めします。
guest

回答3

0

現状をそのままゴリゴリloopに換えるならこんな感じ

js

1const elementsQty = 4; 2for(let i=0; i<elementsQty; i++) { 3 const zeroPadded = ('00' + i).substring(('00' + i).length - 2); 4 const selector = `#js-count${zeroPadded}`; 5 $(selector).keyup(function(evt){ 6 const count = evt.target.val().length; 7 const targetSelector = `.${evt.target.id.replace('js', 'show')}`; 8 $(targetSelector).val(count); 9 }); 10}

投稿2019/09/18 03:21

thyda.eiqau

総合スコア2982

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

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

0

ベストアンサー

クラスの振り方を変えたほうがよいですね

javascript

1<script> 2$(function(){ 3 $('.js-count').on('keyup',function(){ 4 var idx=$('.js-count').index(this); 5 $('.show-count').eq(idx).val($(this).val().length); 6 }); 7}); 8</script> 9<input type="text" class="js-count"><input type="text" class="show-count" readonly tabindex="-1"><br> 10<input type="text" class="js-count"><input type="text" class="show-count" readonly tabindex="-1"><br> 11<input type="text" class="js-count"><input type="text" class="show-count" readonly tabindex="-1"><br> 12<input type="text" class="js-count"><input type="text" class="show-count" readonly tabindex="-1"><br>

追記

どうしてもidやクラスを変えたくないならこうです

javascript

1<script> 2$(function(){ 3 $('#js-count01,#js-count02,#js-count03,#js-count04').on('keyup',function(){ 4 var num=$(this).attr('id').substr(-2); 5 $('.show-count'+num).val($(this).val().length); 6 }); 7}); 8</script> 9<input type="text" id="js-count01"><input type="text" class="show-count01" readonly tabindex="-1"><br> 10<input type="text" id="js-count02"><input type="text" class="show-count02" readonly tabindex="-1"><br> 11<input type="text" id="js-count03"><input type="text" class="show-count03" readonly tabindex="-1"><br> 12<input type="text" id="js-count04"><input type="text" class="show-count04" readonly tabindex="-1"><br>

投稿2019/09/18 03:12

編集2019/09/18 03:25
yambejp

総合スコア116661

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

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

kazuyaaan

2019/09/18 03:44

クラス名は変えたく無かったので2つめの方法で解決しました。 初めての質問だったので、とても嬉しいです!! ありがとうございました!!
guest

0

関数を使うのがいいだろうと思います。

関数を定義します。関数とは、よく使用する処理を サブルーチン として定義するものです。

関数(Function)

js

1 $('#js-count01').keyup(function(){ 2 var count = $(this).val().length; 3 $('.show-count01').val(count); 4 });

js

1function hoge( jsString, showString ){ 2 $(jsString).keyup(function(){ 3 var count = $(this).val().length; 4 $(showString).val(count); 5 }); 6} 7hoge( '#js-count01', '.show-count01' );

投稿2019/09/18 03:11

Lhankor_Mhy

総合スコア36928

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問