質問: firstHeight + secondHeight; if ($window.width() >= 960) { if ($window.scrollTop() >= headerHeight && $window.scrollTop() <= scrollToImage) { $('#img-catch').addClass('fixed'); } else { $('#img-catch').removeClass('fixed'); } } else { if (('#img-catch').hasClass('fixed')) { $('#img-catch').removeClass('fixed'); } } }); ``` fixedが付いている状態で960px以下にリサイズした場合、fixedが消えてくれません。 わかる方いらっしゃればご教授ください。 またjquery初心者でまだコードの書き方が曖昧です。 もっとスマートな書き方があれば合わせてよろしくお願いいたします。
回答: `Uncaught TypeError: "#img-catch".hasClass is not a function` というエラーが出ていると思うのですが、「`"#img-catch".hasClass` を関数として呼び出したが、これは関数ではない」という意味です。`TypeError: ... is not a function` という形を覚えましょう。 英語が理解できなくても、`"#img-catch".hasClass` と表示されていることに違和感を覚えましょう。`hasClass` はjQueryオブジェクトに対して呼び出したはずで、`#img-catch` という文字列に対して呼び出したつもりはないですよね?文字列に `hasClass` メソッドがないのは当然です。 では、エラーが出ている個所を見てみましょう。 ※コンソールの右端に表示されている行番号をクリックすると当該行に飛びます ``` if (('#img-catch').hasClass('fixed')) { $('#img-catch').removeClass('fixed'); } ``` `('#img-catch').hasClass('fixed')` に何が足りないか、気づきましたか? うまく動かないとあきらめる前に、 * エラーが出ていれば、その内容を理解したり、検索したり、発生個所を見直す * エラーが出ていなければ、そもそもその行が実行されていない可能性を考える (前後に `console.log()` を入れたり、ブレークポイントを仕込んだり) ぐらいはしましょう。