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

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

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

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1906閲覧

チェックボックスをチェックした時にjavascriptが動くようにしたい

science_mac

総合スコア29

PHP

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/05/11 09:19

現在ヘッダーとメインページに同じ処理を実装しています。
処理の内容としてはチェックボックスをチェックした時にテキストボックス内にチェックボックスの値が入力されるといったものです。
※チェックボックスをチェックした時に背景色を変更することと、チェックを外した時にテキストボックスの文字を消す処理も入っています。

メインページは以下のように実装しております。
こちらは動作に特に問題ありません。

PHP

1<input type="text" id="keyword" name="keyword" size="30" disabled="disabled"/> 2<div id="material_select"> 3 <div id="check-label-container"> 4 <label class="check-label"> 5 <span>テスト</span> 6 <input type="checkbox" name="check" value="てすと"> 7 <span class="checkmark"></span> 8 </label> 9 </div> 10</div>

JavaScript

1window.onload = function() { 2 var buttons = document.getElementById('material_select').getElementsByTagName('input'); 3 for ( let i = 0; i < buttons.length; i ++ ) { 4 buttons[i].onclick = function() { 5 var keyword = document.getElementById('keyword'); 6 if(this.checked) { 7 keyword.value += this.value + " "; 8 buttons[i].parentNode.style.backgroundColor = '#dcdcdc'; 9 } else { 10 keyword.value = keyword.value.replace(new RegExp(this.value + " ","g"),""); 11 buttons[i].parentNode.style.backgroundColor = 'white'; 12 } 13 } 14 } 15}

ヘッダーの方も処理を実装しようと思ったのですが、同じようにwindow.onload = function()で実装してしまうと後に書いた方が処理されてしまい、片方しか動かなくなります(当たり前ですが...)

そのため、ヘッダーは以下のように実装を試みました。

PHP

1<input type="text" id=" header-keyword" name="header-keyword" size="30" disabled="disabled"/> 2<div id="header_material_select"> 3 <div id="check-label-container"> 4 <label class="check-label"> 5 <span>テスト</span> 6 <input type="checkbox" name="check" value="てすと" onclick="javaScript:header_value_get(this)">> 7 <span class="checkmark"></span> 8 </label> 9 </div> 10</div>

JavaScript

1function header_value_get() { 2 console.log("テスト"); 3 var header_buttons = document.getElementById('header_material_select').getElementsByTagName('input'); 4 console.log("テスト2"); 5 for ( let i = 0; i < header_buttons.length; i ++ ) { 6 header_buttons[i].onclick = function header_value_get() { 7 console.log("テスト3"); 8 var keyword = document.getElementById('header-keyword'); 9 if(check.checked) { 10 console.log("テスト4"); 11 keyword.value += this.value + " "; 12 header_buttons[i].parentNode.style.backgroundColor = '#dcdcdc'; 13 } else { 14 console.log("テスト5"); 15 keyword.value = keyword.value.replace(new RegExp(this.value + " ","g"),""); 16 header_buttons[i].parentNode.style.backgroundColor = 'white'; 17 } 18 } 19 } 20}

こちらを動作させ、コンソールを確認すると以下のように出力されます。
最初のチェック(チェックを入れる)
テスト
テスト2

2回目のチェック(チェックを外す)
テスト3
テスト5

3回目のチェック(チェックを入れる)
テスト3
テスト4

このように一回チェックを入れてから外すという動作を挟まないと本来動いて欲しい処理に分岐してくれません。

ここの処理をどのように工夫すればヘッダー側も正しい動作になってくれるでしょうか...
お知恵を貸していただきたいです。

分かりにくい説明となってしまい、また質問タイトルも適切に書けておらず大変申し訳ありません。

不明点などありましたら追記・修正しますのでよろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

jQuery 使って良いんですよね。

window.onload じゃなくて
$(function() { }); で書いたら良さそうに思いますが、どうでしょうか。

javascript

1<html> 2<head> 3<meta charset="utf-8"> 4<script src="https://code.jquery.com/jquery-1.10.2.js"></script> 5</head> 6 7<!-- 8 以下はとりあえずなので同一ファイル内に書いていますが 9 実際にはヘッダーの方のファイルに書いて良いです 10--> 11<script> 12 $(function() { 13 14 // ヘッダーのチェックボックスがクリックされた時の処理 15 $("#test-header input[type='checkbox']").on("click", function() { 16 17 alert("☆HEADER のチェックボックスがクリックされました☆"); 18 19 }); 20 21 }) 22</script> 23 24<!-- 25 以下はとりあえずなので同一ファイル内に書いていますが 26 実際にはメインの方のファイルに書いて良いです 27--> 28<script> 29 $(function() { 30 31 // メインのチェックボックスがクリックされた時の処理 32 $("#test-main input[type='checkbox']").on("click", function() { 33 34 alert("★MAIN のチェックボックスがクリックされました★"); 35 36 }); 37 38 }) 39</script> 40<body> 41 42 <div id="test-header" style="background:#0ff;"> 43 <input type="checkbox" /> 44 へっだー 45 </div> 46 47 <div id="test-main" style="background:#ff0;"> 48 <input type="checkbox" /> 49 めいん 50 </div> 51 52</body> 53</html>

投稿2018/05/11 09:47

編集2018/05/11 09:49
sk_3122

総合スコア1126

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

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

science_mac

2018/05/11 10:21

ご回答ありがとうございます。 なるほど、確かにこの書き方なら望んでいた動きが実現できました。 勉強不足で大変申し訳ありません。 非常に参考になりました。
guest

0

同じようにwindow.onload = function()で実装してしまうと後に書いた方が処理されてしまい、片方しか動かなくなります

addEventListener を使ってイベントを登録するようにしてみては。

【初心者もコレで納得!JavaScriptの「onloadイベント」でハマりやすい罠をまとめてみた! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト】
https://www.sejuku.net/blog/19754

投稿2018/05/11 10:12

kei344

総合スコア69407

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

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

science_mac

2018/05/11 10:22

ご回答ありがとうございます。 なるほど、このようなことが出来たんですね... こちらも試してみたところ問題なく動作しました。 ありがとうございます。 勉強不足で大変申し訳ありません。 非常に参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問