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

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

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

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

jQuery

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

Q&A

解決済

2回答

1169閲覧

a[jQuery] 特定の要素の子孫に存在するフォームの状態を記憶したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/09/10 10:00

編集2018/09/10 13:33

###やりたいこと

特定のフォームの入力を記憶して
get でわたすか sessionStrage に保存して次に訪れたときにフォームの内容を再現したい

###ためしたこと
以下のようにフォームの状態を Get の query 風にエンコード&再設定するコードをかいてみました

js

1<html> 2<head> 3 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 4</head> 5<body> 6 <input type="text" name="n1" id="i1"> 7 <input type="number" name="n2" id="i2"> 8 <select name="n3" id="i3"></select> 9 <select multiple name="n4" id="i4"></select> 10 <input type="checkbox" checked name="n5" id="i5"> 11 <input type="checkbox" name="n5" id="i5"> 12 13<script> 14 const formStateString = (base) => { 15 let query = ''; 16 console.log(base.find('select:enabled, input[type="number"]:enabled, input[type="text"]:enabled')); 17 base.find('select:enabled, input[type="number"]:enabled, input[type="text"]:enabled').map(e => query = `${query? `${query}&` : ''}${$(e).attr('id')}=${$(e).val()}`); 18 base.find('input[type="checkbox"]').map(e => query = `${query? `${query}&` : ''}${$(e).attr('id')}=${$(e).prop('checked')}`); 19 return query; 20 } 21 22 const setParams = (params) => { 23 if(params) { 24 params.split('&').map(q => { 25 [id, val] = q.split('='); 26 if($(`#${id}`).attr('type') == 'checkbox') 27 $(`#${id}`).prop('checked', val == 'true'); 28 else 29 $(`#${id}`).val(val); 30 }); 31 } 32 }; 33 34 formStateString($('body')); 35</script> 36</body> 37</html>

適当なフォームの HTML をかいて実行したところ
Cannot read property 'toLowerCase' of undefined
at jQuery.fn.init.val
とエラーが出ます

ソース内にあるように find の結果に対してデバッグ出力をはさんだところ
配列の最後に prevObject: jQuery.fn.init(1)というのがついていました

find の結果には子孫要素をだけが含まれると思っていたのですが
この関数? ハッシュ? は何なのでしょうか

find 以外に親要素をうけとって子孫の中のフォーム要素を選択する方法があれば教えていただけるとありがたいです

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

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

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

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

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

guest

回答2

0

ベストアンサー

.map()を誤解しているのでは? 繰り返し処理したいなら.each()です。
https://api.jquery.com/map/
https://api.jquery.com/each/

投稿2018/09/11 01:00

x_x

総合スコア13749

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

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

退会済みユーザー

退会済みユーザー

2018/09/11 02:17

すいません まったくおっしゃるとおりなんですが最近 each 関連ではまってしまったので https://teratail.com/questions/145421 念のためにこの回答をお借りしてループ内でオブジェクトが取り出せてるか確認しているところでした 一応返り値の配列を作る分無駄があるのですが 破壊的代入に関しては each とかわらないかなと思ったので… ただ、まだ map が適用される前の find の返り値の段階で変な値が入ってしまってるみたいなのです
x_x

2018/09/11 02:42

だとしても第一引数はインデックスとなっているので$(e).attr('id')やら$(e).val()と書くのがわかりません。
退会済みユーザー

退会済みユーザー

2018/09/11 03:41

わー ありがとうございます! map を2引数にしたら動きました あと each に戻しても動きました find が悪いとばかり思っていてそれ以降の map のほうをまったくみてなかったので本当に助かりました
guest

0

jQuery.fnはメソッドの拡張ですからどかでinitを呼び出しているようなのですが
どこかちょっとわかりませんね。
引数にする要素の型が違うのかなとも思いますが、具体的に簡単にそのエラーをだせる
ソースがあれば提示いただけるとよいかと

${query? ${query}& : ''}${$(e).attr('id')}=${$(e).val()}

とか

$(#${id})

とか

val == 'true'

とか、怪しそうなところはいくつか見受けられます

投稿2018/09/10 10:48

yambejp

総合スコア114769

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

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

退会済みユーザー

退会済みユーザー

2018/09/10 13:31 編集

すいません ` がエスケープされてソースがうまく表示されてなかったみたいです 修正とともに HTML も追加しました 一応 syntax error はなしで動いてたはずなんですけど…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問