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

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

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

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

Q&A

解決済

2回答

3895閲覧

[jQuery]inputのname属性を取得したいです。

yurika_21

総合スコア12

jQuery

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

0グッド

0クリップ

投稿2022/02/19 09:46

前提・実現したいこと

inputを生成しているのですが、生成したname属性を取得したいです。
attrを使用したのですが、エラーが出て取得出来ませんでした。

こちらがCodePenの環境になります。
リンク内容

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

エラーメッセージ Uncaught TypeError: inputList[i].attr is not a function

該当のソースコード

HTML

1<div class="add-area"> 2 <div class="p-form-item disclosee-address-other"> 3 <div class="p-form-item__heading"> 4 <label class="p-form-item__heading-inner" for="DiscloseeAddressOther1">住所</label> 5 </div> 6 <div class="p-form-item__group"> 7 <div class="p-input"> 8 <div class="p-input__group"> 9 <div class="p-input__relative-wrap"> 10 <input name="Address1" class="p-input__inner p-input__inner--small" type="text" placeholder="郵便番号" onKeyUp="AjaxZip3.zip2addr(this,'','Address2','Address3');" > 11 </div> 12 <div class="p-input__relative-wrap"> 13 <input name="Address2" class="p-input__inner p-input__inner--small" type="text" placeholder="都道府県"> 14 </div> 15 </div> 16 </div> 17 <div class="p-input"> 18 <input name="Address3" class="p-input__inner p-input__inner--small" type="text" placeholder="市区町村"> 19 </div> 20 <button class="p-form-item__add p-add" type="button"> 21 <span class="p-add__icon c-icon c-icon--add"></span>住所をさらに追加する 22 </button> 23 </div> 24 </div> 25</div>

jQuey

1$( function() { 2 "use strict"; 3 var $content = $('.disclosee-address-other'); 4 5 $( '.p-form-item__add' ).on( 'click', function() { 6 var inputCount = $('.add-area .disclosee-address-other').length; 7 var element = $content.clone( true ).appendTo( '.add-area' ); 8 // 複製したinputのクリア 9 var inputList = element[0].querySelectorAll('input[type="text"]'); 10 for (var i = 0; i < inputList.length; i++) { 11 inputList[i].value = ""; 12 inputList[i].attr('name'); 13 console.log(inputList[i]); 14 } 15 16 $(this).hide(); 17 $('.p-form-item__add:last').show(); 18 } ); 19 } );

試したこと

inputList[i].attr('name');で取得しようとしましたが、エラーが表示されました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

inputListquerySelectorAllで取得している以上、jQueryオブジェクトではなく生のDOMオブジェクトです。

getAttributeを使いましょう(MDN)。

投稿2022/02/19 10:12

maisumakun

総合スコア146509

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

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

yurika_21

2022/02/19 14:00

ありがとうございます! jQueryオブジェクト、Domオブジェクトの違いに関する知識不足でした! 非常に勉強になりました。
guest

0

ベストアンサー

CodePen を示しているのは良いことです。回答がしやすくなります。

attr() は jQuery オブジェクトのメソッドです。DOM の取得には jQuery メソッド $() または $(elem).find() を用いることで jQuery オブジェクトとして要素を取得できます。

変数名の先頭に $ を付けているのは、その変数に格納された要素が jQuery オブジェクトであることを明示するためです。元のコードでは var element には jQuery オブジェクトが代入されていますので、ここは var $element と書くべきです。ただし、この変数名の先頭に $ を付けるのは可読性を上げるためであって、JavaScript の文法には影響しません(変数名の先頭に $ がなくても動作します)。

元のコードは以下のように書き直せます。

js

1$(function() { 2 "use strict"; 3 var $content = $('.disclosee-address-other'); 4 5 $('.p-form-item__add').on('click', function() { 6 var $element = $content.clone(true).appendTo('.add-area'); 7 // 複製したinputのクリア 8 var $inputList = $element.find('input[type="text"]'); 9 $inputList.each(function() { 10 var $input = $(this); 11 $input.val(''); 12 console.log($input.attr('name')); 13 }); 14 15 $(this).hide(); 16 }); 17});

投稿2022/02/19 10:21

arcxor

総合スコア2857

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

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

yurika_21

2022/02/19 14:01

丁寧なご回答ありがとうございます! 回答に加え、可読性についても触れて頂き大変勉強になりました。 無事解決することが出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問