JavaScriptでWebページを動かすのよくある間違い

レッスンの本文で注意している点を、つまずきの側から39件ぶん並べ直しました。書いた覚えのある形が見つかったら、 そのままレッスンに戻って前後を読めます。

DOM とは何か

レッスンを読む

HTML ファイルが書きかわると思ってしまう

JavaScript が変えるのは、いまブラウザの中にある DOM だけです。次のコードで肩書きを変えても、index.html の中身は 1 文字も変わりません。

DOM とは何かで詳しく読む

document を自分でつくろうとする

document はブラウザが用意している変数です。次のように書くと、もともとあるものを上書きしてしまい、以降の DOM 操作が全部おかしくなります。

DOM とは何かで詳しく読む

ソース表示と Elements タブを同じものだと思う

「ソースの表示」は、サーバーから届いた元の HTML です。「Elements」は、いまの DOM です。JavaScript で足したカードはソース表示には出てきません。動いているかどうかを確かめるときは、必ず Elements タブのほうを見ます。

DOM とは何かで詳しく読む

要素を取得する

レッスンを読む

セレクタの記号を忘れる

クラスなら .、id なら # が要ります。付け忘れるとタグ名として探しにいくので、当然見つかりません。

要素を取得するで詳しく読む

querySelectorAll の結果に直接プロパティを書く

NodeList は要素の入れ物であって、要素そのものではありません。まとめて設定はできません。

要素を取得するで詳しく読む

1 つしか無いのに querySelectorAll を使う

間違いではありませんが、cards[0] と書くところが増えて読みにくくなります。1 つに決まっているなら querySelector、複数を相手にするなら querySelectorAll、と使い分けます。

要素を取得するで詳しく読む

テキストを書き換える

レッスンを読む

数値をそのまま入れて驚く

textContent に数値を入れると、自動で文字列に変わって表示されます。エラーにはなりませんが、0 を入れたときに空欄に見えてしまうことがあります。単位や説明を足して "0 回表示" のように渡すと、意図が伝わる表示になります。

テキストを書き換えるで詳しく読む

class を付け外しする

レッスンを読む

スペース区切りで 2 つ渡す

add"featured new" のような空白入りの文字列を渡すと InvalidCharacterError になります。2 つ足したいときは引数を 2 つに分けます。

class を付け外しするで詳しく読む

CSS に無い class を付けて「効かない」と悩む

classList.add は、CSS にその指定があるかどうかを気にしません。存在しない class を付けても、エラーは出ず、見た目も変わりません。効かないときは、まず検証ツールで class が付いているかを見て、付いていたら CSS のほうに指定があるかを確かめます。

class を付け外しするで詳しく読む

要素を作って追加する

レッスンを読む

class を付ける先を間違える

見た目が当たらないときは、class を付けた要素と、CSS が狙っている要素がずれていることがよくあります。.work-card の指定は article に付けないと効きません。中の h3 に付けても何も起きません。

要素を作って追加するで詳しく読む

配列から一覧を描画する

レッスンを読む

関数の中で return を忘れる

createWorkCard の最後の return card を書き忘れると、関数は undefined を返します。append(undefined) は文字列の "undefined" を足してしまうので、カードのかわりにその文字だけが並びます。

配列から一覧を描画するで詳しく読む

createElement を forEach の外に置く

要素は 1 件ごとに新しくつくらないといけません。外で 1 つだけつくって使いまわすと、同じ要素が親から親へ移動するだけで、最後の 1 枚しか残りません。

配列から一覧を描画するで詳しく読む

forEach の中で return すれば全部止まると思う

止まりません。飛ばすだけです。1 件でも条件に合うものが見つかったら終わりにしたい、という処理は forEach には向いていません。第7章の find を使うか、for-of に書き換えます。

配列から一覧を描画するで詳しく読む

つくる ギャラリーをデータ駆動にする

レッスンを読む

消したはずの要素を掴んだままにする

HTML から消した要素を掴んでいた古いコードが残っていると、nullundefined に対する操作でエラーになります。エラーが出た行より下は動かないので、「途中までしか描かれない」という症状になります。

つくる ギャラリーをデータ駆動にするで詳しく読む

HTML に書いた見た目と、JS でつくる見た目がずれる

class の付け忘れがいちばん多い原因です。HTML では <article class="work-card"> なのに、JavaScript で card.className を書き忘れると、枠も余白も付かない裸の article が並びます。並べて見比べる段取りは、このずれを見つけるためのものです。

つくる ギャラリーをデータ駆動にするで詳しく読む

クリックに反応する

レッスンを読む

要素を取る前で綴りを間違えている

id の綴りが 1 文字違うと helloButtonnull になり、Cannot read properties of null で止まります。エラーが指す行番号は addEventListener の行ですが、本当の原因は 1 行上にあります。

クリックに反応するで詳しく読む

イベント名に on を付ける

addEventListener に渡す名前に on は付けません。"click" です。エラーは出ず、ただ何も起きないので気付きにくい間違いです。

クリックに反応するで詳しく読む

event オブジェクト

レッスンを読む

引数を書き忘れる

引数がないので event は未定義です。event is not defined で止まります。関数の丸かっこの中に event と書き足します。

event オブジェクトで詳しく読む

closest を挟まずに target を使う

説明文を押すと event.targetp で、その中に h3 はありません。null に対して .textContent を読もうとして止まります。まず closest でカードまで戻します。

event オブジェクトで詳しく読む

カードの外を押したときを考えていない

カードとカードのすき間を押すと cardnull です。if (!card) return; の 1 行を入れるだけで防げます。

event オブジェクトで詳しく読む

入力欄の値を取る

レッスンを読む

登録する相手を間違える

document に登録すると、名前欄やメール欄を打ったときにも動いてしまいます。今回は #message に直接登録します。

入力欄の値を取るで詳しく読む

フォーム送信を制御する

レッスンを読む

丸かっこを付け忘れる

これは関数を参照しただけで、呼んでいません。エラーも出ないので気付きにくく、ページだけが再読み込みされます。event.preventDefault() と書きます。

フォーム送信を制御するで詳しく読む

つくる ダークモード切替

レッスンを読む

class 名にドットを付けてしまう

classList に渡すのは class 名そのものです。ドットが要るのは querySelector のセレクタのときだけです。.dark という名前の class が付いてしまい、CSS には当たりません。

つくる ダークモード切替で詳しく読む

className を上書きしてしまう

これは class 全体を dark だけで置き換える書き方です。元から付いていた class があれば消えてしまいます。付け外しには classList を使います。

つくる ダークモード切替で詳しく読む

つくる フォームの入力チェック

レッスンを読む