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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

1333閲覧

(JavaScript)URLのパラメーターに合わせてボタンの色を変更したい

minari766

総合スコア17

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/06/02 13:06

###実現したいこと
アイコンをクリックするとURLにパラメーターが渡される仕組みになっています。
例)「全て」をクリック押すとURLにall、「ストーリー」をクリックURLにstoryが渡される
イメージ説明

これを活かして、逆にURLからJavaScriptでパラメーターを取得し、どのアイコンをクリックしたかが視覚的にわかるように対応するアイコンの色を変更したいと考えております。

###考えていること・問題点
URLからのパラメーター取得方法はURLSearchParams(window.location.href)でできると認識。
また、アイコンの色変更はifとbgColorで変更可能と認識。

上記2つの機能を合わせ、サンプルコードのようにしましたが、何も変化がありません。
そもそもURLSearchParams(window.location.href)の直下にconsole.log("適当な文字列")を置き、
検証画面で動きを確認しましたが、上記"適当な文字列"が表示されないことから、URLのパラメーターの取得がそもそも動いてないのではと考えますが、結論に至らない状態です。

上記考え方に問題があるのか?それともコードに過不足があるのか、お手数ですがご教示いただけますと幸いです。

###サンプルコード
必要と思われるコードのみを表示しております。
不足等ありましたらご教示いただけますと幸いです。

HTML

1<div class="picmenu"> 2 <ul id="table-ul"> 3 <li onmouseover="mouseOn1();" onmouseout="mouseOff1();"> 4       <!--Djangoを使用。下記コードにてURLにindex/all/allパラメーターを追加--> 5 <a href="{% url 'index' 'all' 'all' %}"> 6 <img src="{% static 'img/star.png' %}" class="icon-category" id="star" /> 7 <p>全て</p> 8 </a> 9 </li> 10 <li onmouseover="mouseOn2();" onmouseout="mouseOff2();"> 11       <!--Djangoを使用。下記コードにてURLにindex/all/storyパラメーターを追加--> 12 <a href="{% url 'index' 'all' 'story' %}"> 13 <img src="{% static 'img/memo.png' %}" class="icon-category" id="memo" /> 14 <p>ストーリー</p> 15 </a> 16 </li> 17 </ul> 18</div>

JavaScript

1 function color1(){ 2 var url = new URLSearchParams(window.location.href); 3 var params = url.searchParams; 4 if (params.has("all")){ 5 documents.baColor = "#0595a7" 6 } else if (params.has("story")){ 7 documents.bgColor = "#0595a7" 8 } 9 } 10 11 function mouseOn1(){ 12 var obj = document.getElementById("star"); 13 obj.src = "{% static 'img/star_white.png' %}"; 14 // console.log("mouseOn1") 15 } 16 17 function mouseOn2(){ 18 var obj = document.getElementById("memo"); 19 obj.src = "{% static 'img/memo_white.png' %}"; 20 }

###環境
HTML5
Bootstrap 4.7.0
Python 3.6.3
Django 2.2.16

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

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

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

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

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

guest

回答3

0

おはようございます。

問題文読ませていただきました。

以下の手順にて対応するとうまくいきそうです。

  1. jsファイルを作成する。
  2. ロードしたタイミングで発火するjsを作成する。(参考 : https://techacademy.jp/magazine/15558)
  3. var path = location.pathname;の末端(all or story)を取得する。(参考 : https://lab.syncer.jp/Web/JavaScript/Snippet/20/, 参考 : https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split)
  4. 変更したいHTML要素を指定してcssを変更する。(参考 : https://techacademy.jp/magazine/31008)

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/02 22:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

minari766

2021/06/02 22:52

各種参考URLも添付いただき有り難うございます! やはりonloadとURL読み込みを組み合わせるんですね。 記事読み込んでもう一度挑戦してみます!
guest

0

color1の呼び出しが見当たらないですが?
あとbaColorbgColorですねきっと。

投稿2021/06/02 13:33

itagagaki

総合スコア8402

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

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

minari766

2021/06/02 22:28

ご回答有り難うございます。 おっしゃる通りcolor1の呼び出しのイベントハンドラが抜けておりました。 また、baColorはタイプミスです。失礼いたしました。 <a href="{% url 'index' 'all' 'all' %}">にとりあえずonclickを置いてみたところ、JavaScriptが動いたのですが、同時にページ更新も行われるため、一瞬で元に戻ってしまいます。 onloadがページ更新時に使えそうと考えたのですが、今度はJavaScriptが動く形跡が見られなくなってしまいました。 ページ更新がトリガーとなるその他のイベントハンドラをご存知ないでしょうか。
guest

0

ベストアンサー

画像を見る限り、URLのパラメータという用語の意味を誤解されているように感じます。
パラメータと呼ばれるのは、"http://example.com/search?foo=1&bar=2"というURLがあったとして、{foo: 1}(キーがfoo、値が1)・{bar: 2}(キーがbar、値が2)というようなデータです。
画像にあるようなURLにはパラメータが含まれていないため、当然取得できていないのだと考えます。

今回で言うと、URLを"127.0.0.1:8000/area/all?all=true"とすれば「全て」のアイコンの色が変わり、"127.0.0.1:8000/area/all?story=true"のようにすれば、「ストーリー」の色が変わるのではないでしょうか?
提示いただいたソースコードだけだとこちらで動作確認ができないため、一旦試していただけますか?

(※今回は、質問者様の書かれたコードをそのまま利用するため、all、storyという2種類のパラメータを使用するようにしましたが、"?clicked=all"または"?clicked=story"のようなパラメータにして、clickedというパラメータの値(今回でいうall、story)で分岐する方がよいような気は致します。)

(追記)改めて見てみると、Javascriptの5行目に誤字らしい部分があったり(documents.baColor = "#0595a7"とありますがbgColorの間違いでは?)、color1関数の呼び出しが見当たらなかったりするので、別の原因も複合している可能性はありそうです。

投稿2021/06/02 13:18

編集2021/06/02 13:28
hallen0225

総合スコア587

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

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

minari766

2021/06/02 22:36

ご回答有り難うございます。 bgColorのスペルミスを修正し、color1の呼び出しのイベントハンドラを追加してみました。(試しにonclick、onloadを使用) ご指摘の通り、パラメーターへの理解ができておりませんでした。詳細ご教示いただき誠に有り難うございます。 現状の"127.0.0.1:8000/area/all/all"という並びについてですが、その他の機能にこのURL形式を利用しているため、できれば今の形式を維持したいと考えております・・・。 URLSearchParams以外でURLの文字列を取得する方法をご存知であればご教示いただけないでしょうか。 お手数となりすみません。
hallen0225

2021/06/03 06:37

URLの形式を維持されたいのであれば、(他の方もコメントされていましたが)URLの末尾の部分、具体的に言うと、最後のスラッシュの次の文字から最後の文字までの部分を取得できれば良いのだと思います。 "127.0.0.1:8000/area/all/all"でしたら"all"、"127.0.0.1:8000/area/all/story"でしたら"story"の部分ですね。 ここを取得する方法としてはこのようになるかと思います。(str変数に"all"または"story"が入ります) let url = window.location.href let indexOfLastSlash = url.lastIndexOf('/'); let str = url.substring(indexOfLastSlash + 1)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問