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

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

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

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

Q&A

解決済

4回答

1155閲覧

ログで怒られたのですが、どういう意味なのかわからないので教えてください。

hsd

総合スコア17

JavaScript

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

0グッド

0クリップ

投稿2019/02/04 07:55

const controllers = document.querySelectorAll(".controller"); controllers.addEventListener("click", function() { controllers[0].style("transform", "translateX(960px)"); controllers[1].style("transform", "translateX(0)"); controllers[2].style("transform", "translateX(-960px)"); }); // controllers.addEventListener is not a function

controllersのインデックス番号を取得してcssを操作して動かしたいのですが、
上記のような怒られ方をします。
調べてもあまりよくわからないので、どなたかお教えください。

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

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

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

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

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

azuapricot

2019/02/04 08:03

もう解決しているようですが、あなたの前回の質問でもほぼ同じ質問をしています https://teratail.com/questions/171508 controllersはindexを指定しないと使えませんというのも前回の質問で教えてもらっているはずです。 もう一度よく見直してください。 質問するのは大変良いことですが、それを吸収せず同じことを繰り返し聞くのは良くないです。 復習しましょう。
azuapricot

2019/02/04 08:04

動くコードをコピペして満足するようじゃいつまでたっても成長できません。 なんでだろう、どうしてこれは動かないんだろうとエラーの原因を理解するようにしてください。
m.ts10806

2019/02/04 08:30

ほとんど同じ回答をしてしまったことを反省… 回答者も過去質問きちんと探さなきゃいけませんね
hsd

2019/02/05 04:35

ご指摘ありがとうございます。 つど、コードの意味を理解して復習した上で、 同じ質問はしないよう気をつけます。 お手数をおかけして申し訳ございません。
guest

回答4

0

ベストアンサー

querySelectorAllNodeListという、対象となったエレメントの配列のようなものを返しますので、これ自体に直接addEventListenerすることはできません。

controllers[0]controllers[1]controllers[2]にそれぞれaddEventListenerするか、forなどで回してaddEventListenerしていくなどが必要です。

投稿2019/02/04 07:57

maisumakun

総合スコア145184

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

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

hsd

2019/02/04 08:02

回答ありがとうございます! 早速、試してみます。
guest

0

AllのついてないquerySelectorと混同してる感じですね。
各々のコントローラに対して個別にイベントを登録する必要があります。
例えばこんな感じ

JavaScript

1const controllers = document.querySelectorAll(".controller"); 2const controllerStyles = ["translateX(960px)", "translateX(0)", "translateX(-960px)"]; 3 4controllers.forEach(function (it) { 5 it.addEventListener("click", function() { 6 controllerStyles.forEach(function (translate, i) { 7 controllers[i].style("transform", translate); 8 } 9 }); 10});

なお、querySelectorAllはforEachを持っているはずなので基本的にはこの記述で良いのですが、
何故かIE11だけquerySelectorAllの結果として帰ってくるNodeListがforEachメソッドを所持していません。
実践的にはpapinianusさんの回答に寄せた方が良いですね。

投稿2019/02/04 08:03

編集2019/02/04 08:12
miyabi-sun

総合スコア21158

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

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

maisumakun

2019/02/04 08:06

中身でcontrollersの添字を参照していることを考えれば、querySelectorAllで間違いはないのかなと判断しました。
miyabi-sun

2019/02/04 08:11

回答するボタンを押した瞬間に気が付きました(´・ω・`)
hsd

2019/02/04 08:55

controllerStyles.forEach(function (translate, i) { controllers[i].style("transform", translate); } ここのtranslateという引数はどのような意味があるのでしょうか。
guest

0

Document.querySelectorAll()

与えられた CSS セレクターに一致する文書中の要素のリストを示す静的な (生きていない) NodeList を返します。

に対し

EventTarget.addEventListener()

特定のイベントが対象に配信されるたびに呼び出される関数を設定します。 対象としてよくあるものは Element, Document, Window ですが、イベントに対応したあらゆるオブジェクトが対象になることができます (XMLHttpRequestなど)。

だからです。
Listはいわば配列です。
EventTargetに対するイベントは1つ1つ登録しなければなりません。
取得されたcontrollersをforなどでループして個々に登録すると良いでしょう。

投稿2019/02/04 08:02

m.ts10806

総合スコア80850

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

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

0

検証してないけど、こんな感じ

javacript

1[].forEach.call(document.querySelectorAll(".controller"),function(elm){ 2 elm.addEventListener("click", function() { 3 controllers[0].style("transform", "translateX(960px)"); 4 controllers[1].style("transform", "translateX(0)"); 5 controllers[2].style("transform", "translateX(-960px)"); 6 }); 7});

投稿2019/02/04 07:59

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問