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

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

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

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

HTML

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

Q&A

解決済

4回答

1738閲覧

クリックされたボタンにクラスを追加(HTML側にonclick使用)

harapara

総合スコア39

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2020/03/18 08:38

3つのボタンがあり、クリックされたボタンにはアニメーション用のクラスを追加したいです。
追加するクラス名はすべて同じです。

html側にonclickで設定しています。
onclickでの方法がなかなか検索ヒットせず、解決法が分かりません。
今のままではボタンAをクリックしてもすべての要素にクラスが追加されます。

html

1     <span class="btn"> 2 <button class="stamp" type="submit" name="stamp" value="A" onclick="myfunc(1);"> 3 <div>A</div> 4 </button> 5 </span> 6     <span class="btn"> 7 <button class="stamp" type="submit" name="stamp" value="B" onclick="myfunc(2);"> 8 <div>B</div> 9 </button> 10 </span> 11     <span class="btn"> 12 <button class="stamp" type="submit" name="stamp" value="C" onclick="myfunc(3);"> 13 <div>C</div> 14 </button> 15 </span>

js

1 function myfunc(){ 2 var stamp = document.getElementsByClassName('stamp'); 3 for (var i = 0; i < stamp.length; i++) { 4 stamp[i].classList.add('is-animation'); 5 }; 6 };

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

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

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

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

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

guest

回答4

0

addEventListener() のほうが HTML を変更せずに済むのでいいのではないかと思いますが、とりあえず onclick 属性を使うとするなら event を渡すようにします。

HTML

1<button class="stamp" type="submit" name="stamp" value="A" onclick="myfunc(event);">

currentTarget プロパティに対象となるボタンがあります。

JavaScript

1 function myfunc(event) { 2 event.currentTarget.classList.add('is-animation'); 3 }

https://developer.mozilla.org/ja/docs/Web/API/Event/currentTarget
https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener

投稿2020/03/18 08:56

x_x

総合スコア13749

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

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

harapara

2020/03/18 09:50

addEventListener() の方が良いのですね、、 その辺調べてみます。 ありがとうございます!
guest

0

1番からの連番で指示するならこうです

javascript

1function myfunc(num){ 2 var stamp = document.getElementsByClassName('stamp'); 3 stamp[num-1].classList.add('is-animation'); 4}

投稿2020/03/18 09:29

yambejp

総合スコア116443

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

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

yambejp

2020/03/18 09:30

あまり汎用性が高くないのに加えて、submitになにか処理しても formが遷移してしまうのであまり実用的ではないと思います
yambejp

2020/03/18 09:39

他の方も指摘していますがhtmlからjsを切り離すためには addEventListenerへの移行を検討ください
harapara

2020/03/18 09:41

そうなんですね、、 私の知識ではよく分からないのでバックサイド側に確認しておきます! ありがとうございます!
guest

0

このような形でいかがでしょうか?

  • onclick="myfunc(1);"などの指定がありましたが、関数側で引数が用意されていなかったので用意しました
  • value属性が固有だったので、querySelectorAllで取得するようにしました。
  • for文を無くす書き方もできるとは思いますが、そのまま残しています。

HTML

1<span class="btn"> 2 <button class="stamp" type="submit" name="stamp" value="A" onclick="myfunc('A');"> 3 <div>A</div> 4 </button> 5</span> 6<span class="btn"> 7 <button class="stamp" type="submit" name="stamp" value="B" onclick="myfunc('B');"> 8 <div>B</div> 9 </button> 10</span> 11<span class="btn"> 12 <button class="stamp" type="submit" name="stamp" value="C" onclick="myfunc('C');"> 13 <div>C</div> 14 </button> 15</span>

JS

1function myfunc(btnValue) { 2 var stamp = document.querySelectorAll("[value='" + btnValue + "']"); 3 for (var i = 0; i < stamp.length; i++) { 4 stamp[i].classList.add('is-animation'); 5 } 6}

JavaScript的にもっと正しい方法はありそうですが、とりいそぎ..

投稿2020/03/18 09:09

new1ro

総合スコア4528

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

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

harapara

2020/03/18 09:48

ありがとうございます! こちらの方法で動きました! あまり知識ないので引数の書き方なども勉強になりました。
guest

0

ベストアンサー

thisを引数として渡してはいかがでしょうか。

HTML

1     <span class="btn"> 2 <button class="stamp" type="submit" name="stamp" value="A" onclick="myfunc(this);"> 3 <div>A</div> 4 </button> 5 </span> 6     <span class="btn"> 7 <button class="stamp" type="submit" name="stamp" value="B" onclick="myfunc(this);"> 8 <div>B</div> 9 </button> 10 </span> 11     <span class="btn"> 12 <button class="stamp" type="submit" name="stamp" value="C" onclick="myfunc(this);"> 13 <div>C</div> 14 </button> 15 </span>

javascript

1 function myfunc(a){ 2 a.classList.add('is-animation'); 3 }

:追記
コメントで書いた内容を追記します。
myfunc(0)のように引数を数値で渡したい場合は以下の通りです。

javascript

1function myfunc(a){ 2 var stamp = document.getElementsByClassName('stamp'); 3 stamp[a].classList.add('is-animation'); 4};

投稿2020/03/18 08:55

編集2020/03/18 09:40
kokemomo.sour

総合スコア330

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

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

harapara

2020/03/18 09:06

ありがとうございます! どのボタンか分かるように引数をmyfunc(0)のように番号付けてほしいという バックエンジニア要望があったのですが、 そこはどうにもならないですかね。。
kokemomo.sour

2020/03/18 09:12

意図にあっているか自信ないのですが、 引数をそのまま配列の添字にする、だといかがでしょう。。 ``` function myfunc(a){ var stamp = document.getElementsByClassName('stamp'); stamp[a].classList.add('is-animation'); }; ```
harapara

2020/03/18 09:38

あってます!教えていただいた方法でいけました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問