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

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

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

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

1回答

228閲覧

いいねボタンを Javascript でカウントしたいのですが数字が表示されません

homepage-site

総合スコア54

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

1クリップ

投稿2024/12/26 08:47

実現したいこと

SVG画像のいいねボタンがクリックされた数をカウントしてその数を表示させたい。

発生している問題・分からないこと

SVG画像の右側に数字が表示されません。

該当のソースコード

Javascript

1<?php 2/* 3Template Name: bbs_lile_count 4固定ページ: いいねボタン 5*/ 6?> 7<style> 8 .quest-likeButton svg { 9 vertical-align: text-bottom; 10 } 11 12 .quest-likeButton { 13 height: 100px; 14 width: 100px; 15 } 16</style> 17 18<button type="button" class="quest-likeButton"> 19 <svg version="1.1" class="likeButton-icon" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" 20 y="0px" viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve"> 21 <style type="text/css"> 22 .st0 { 23 fill: #FFFFFF; 24 stroke: #000000; 25 stroke-width: 8.7931; 26 stroke-linecap: round; 27 stroke-linejoin: round; 28 stroke-miterlimit: 10; 29 } 30 </style> 31 <path class="st0" d="M101.5,175.5c3.9,5.9,16.6,9.3,16.6,9.3h58.6c13.2-4.4,5.9-17.1,5.9-17.1s7.8-1,11.2-9.3 32 c3.4-8.3-3.4-12.7-3.4-12.7s10.3-1.5,10.3-11.2c0-12.2-11.7-10.3-11.7-10.3s10.7,1,10.7-11.7s-11.2-10.7-11.2-10.7h-40.1 33 c0,0,2.9-8.3,3.4-14.7c0.5-6.4,2.9-18.6-7.8-28.8s-17.1-4.4-17.1-4.4v22.5c0,0,0.1,5.1-3.4,10.1l-15.3,29.7l-6.7,4.6" /> 34 <path class="st0" d="M101.5,120.8v59.6c0,0,0.5,7.3-4.9,7.3H65.4c0,0-6.4-0.5-6.4-4.9v-60.1c0,0,0.5-8.3,4.9-8.3h30.8 35 C94.7,114.4,101.5,113.4,101.5,120.8z" /> 36 </svg> 37</button> 38<span class="likeCount"></span> 39 40<script> 41 document.addEventListener('DOMContentLoaded', function() { // キーが押された瞬間に一度だけ発生 42 //function countClickbutton() { 43 // カウント用の変数 44 let count = 0; 45 // いいねボタンの要素を取得 46 const likeButtonIcon = document.querySelector(".likeButton-icon"); 47 // 取得したいいねボタンがクリックされた時、カウントを1つ増やして再代入する 48 likeButtonIcon.addEventListener("click", function() { 49 count++; 50 // ボタンが押された時にいいねされた状態の見た目に変更する 51 likeButtonIcon.classList.toggle('liked'); 52 // いいねカウント表示 53 likeCountElement.textContent = count; 54 }) 55 // } 56 }, false); 57</script>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

SVG画像を指定してカウントしたのが原因ではないかと考え、ボタンに変更してみたのですが表示されませんでした。
likeButtonIcon.addEventListener("click", function() {

questLikeButton.addEventListener("click", function() {

補足

※ 参考サイト
https://note.com/gigun/n/na94d297bc670

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

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

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

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

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

yambejp

2024/12/26 08:56

状況がわかりません。 サーバー側でいいねの数がカウントアップされる仕組みがあるならAPIで更新して取りに行く必要があります。 自分が複数回おせて、その数をカウントアップするだけならそういう仕組でもいいですが、いいねの趣旨とは違うような気がします
pecmm

2024/12/26 09:02

何かエラーメッセージは出ていますか? 画面上で異常が見当たらなくても、開発者ツールのコンソール等に表示されている可能性があります
homepage-site

2024/12/26 10:14

yambejpさん回答ありがとうございます、Q&A掲示板での質問に関するいいね機能になるため、データベースで質問と結びつける必要があることに後々気が付いたのですが、Javascript で作成していたので勉強のために一度カウントアップする機能を作り上げたいと思っております。
homepage-site

2024/12/26 10:21

pecmmさん回答ありがとうございます。 Uncaught ReferenceError: likeCountElement is not defined at HTMLButtonElement.<anonymous> というエラーが表示されており、関数名が未定義でした確認不足で申し訳ありません。 エラーを修正したのですが、いいね画像をクリックした際に別のエラーが発生していて原因が分かりません。 アドバイスお願い致します。 ※ エラー文 Uncaught TypeError: Cannot set properties of null (setting 'textContent') at SVGSVGElement.<anonymous> (いいねボタンテスト/:49:42) ※ 該当コード ※ 42行目 likeButtonIcon.addEventListener("click", function() { ※ 49行目 likeCountElement.textContent = count;
Lhankor_Mhy

2024/12/27 00:33

likeCountElement には何が入っていますか? 定義している部分のスクリプトを提示してください。
Lhankor_Mhy

2024/12/27 01:23

参考にされた記事を読んだのですが、 const likeCountElement = document.getElementById("likeCount") という行があり、homepage-site さんのコードからは削除されているようでした。 単純なコピペミスを疑っています。
homepage-site

2024/12/27 13:24

Lhankor_Mhyさん回答ありがとうございます。 ご指摘頂いた通りコードが不足していたことに気が付き修正しているのですが、エラーが発生しております。
guest

回答1

0

とりあえずsvg内の数値をインクリメントしたいだけならこれでいけます

html

1<style> 2 .quest-likeButton svg { 3 vertical-align: text-bottom; 4 } 5 6 .quest-likeButton { 7 height: 100px; 8 width: 100px; 9 } 10</style> 11 12<button type="button" class="quest-likeButton"> 13 <svg version="1.1" class="likeButton-icon" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" 14 y="0px" viewBox="0 0 256 256" style="enable-background:new 0 0 256 256;" xml:space="preserve"> 15 <style type="text/css"> 16 .st0 { 17 fill: #FFFFFF; 18 stroke: #000000; 19 stroke-width: 8.7931; 20 stroke-linecap: round; 21 stroke-linejoin: round; 22 stroke-miterlimit: 10; 23 } 24 </style> 25 <path class="st0" d="M101.5,175.5c3.9,5.9,16.6,9.3,16.6,9.3h58.6c13.2-4.4,5.9-17.1,5.9-17.1s7.8-1,11.2-9.3 26 c3.4-8.3-3.4-12.7-3.4-12.7s10.3-1.5,10.3-11.2c0-12.2-11.7-10.3-11.7-10.3s10.7,1,10.7-11.7s-11.2-10.7-11.2-10.7h-40.1 27 c0,0,2.9-8.3,3.4-14.7c0.5-6.4,2.9-18.6-7.8-28.8s-17.1-4.4-17.1-4.4v22.5c0,0,0.1,5.1-3.4,10.1l-15.3,29.7l-6.7,4.6" /> 28 <path class="st0" d="M101.5,120.8v59.6c0,0,0.5,7.3-4.9,7.3H65.4c0,0-6.4-0.5-6.4-4.9v-60.1c0,0,0.5-8.3,4.9-8.3h30.8 29 C94.7,114.4,101.5,113.4,101.5,120.8z" /> 30 <text x=180 y=220 font-size="40px">1</text> 31 </svg> 32</button> 33<span class="likeCount"></span> 34 35<script> 36window.addEventListener('DOMContentLoaded',()=>{ 37 const likeButtonIcon = document.querySelector(".likeButton-icon"); 38 likeButtonIcon.addEventListener("click", function() { 39 likeButtonIcon.querySelector('text').textContent-=-1; 40 }); 41}); 42</script>

投稿2024/12/27 03:49

yambejp

総合スコア116921

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

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

homepage-site

2024/12/27 13:28

回答ありがとうございます。 count は必ずしも必要ないんですね…勉強になりました。
homepage-site

2024/12/27 13:38 編集

1点お聞きしたいことがありまして、カウントをリアルタイムで反映させてデータベースに保存する場合 Ajax を使う事になると思うのですが、調べたところカウントで jquery を使われている方が多いように感じました。 Javascript で作成することが多いため出来ればそちらで考えたいと思っております。 何故 jquery が主流なのか分かりますでしょうか? ※ 参考サイト https://qiita.com/kanasann1106/items/4ea0675afde639e6d540 https://zenn.dev/torihazi/articles/2fefc4b673aea7
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問