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

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

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

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

JavaScript

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

Q&A

解決済

2回答

3614閲覧

ループ内でのチェックボックスの連動

kans00229

総合スコア28

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2016/08/26 06:06

編集2016/08/26 08:39

###前提・実現したいこと
現在、下記のソースのようにclass="checkAll"を持つチェックボックスをチェックすると
class="checkAll"のidと同じclassを持つチェックボックスが連動してチェックされます。

今回実現したい動きとして、「メールアドレス1」「メールアドレス2」のチェックボックスのいずれかを
クリックした時に「名前」(class="checkAll")のチェックボックスが連動してチェックされる動きを追加したいと考えております。

つまり「名前」(class="checkAll")はどれかのチェックボックスがチェックされたら必ず、連動してチェックされる動きとなります。

現状phpの動きとして、チェックボックスでチェックした要素をPOSTして、次のPHPでデーターベースからデータを持ってきて表示するため、idである['id_mbr']は必ずチェックする必要があります。

ループの中でなければ、固有のIDなどで連動させればできると思いますが、当方の知識不足で
ループ内での動きを実現する動きが思いうかばないのが現状です。また、出来ましたらjavascriptで
連動する動きをとれたらと思います。

稚拙な説明と、稚拙な質問かもしれませんが、何卒お力をお貸し頂ければと思います。

###該当のソースコード

<script> $(function(){ $('.checkAll').on('click', function() { $('.' + this.id).prop('checked', this.checked); }); }); </script> <?php foreach ($data as $key => $value) { ?> <input type="checkbox" id="delete<?php echo $value['id_mbr'];?>" class="checkAll" name="select_delete[]" value="<?php echo $value['id_mbr'];?>" >名前 <input type="checkbox" value="<?php echo $value["email_1_mbr"]; ?>" class="delete<?php echo $value['id_mbr'];?>"> メールアドレス1<br> <input type="checkbox" value="<?php echo $value["email_2_mbr"]; ?>" class="delete<?php echo $value['id_mbr'];?>">メールアドレス2<br> <?php { ?>

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

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

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

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

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

kei344

2016/08/26 07:32

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答2

0

ベストアンサー

これはcheckAllが未チェックの場合、メール1とメール2の両方がチェックされたらcheckAllをチェックし、
逆にcheckAllがチェックされてる場合メール1とメール2のいずれかのチェックが外れたら、checkAllのチェックもはずしたい
という意味でしょうか?

追記1

とりあえず上記条件で

javascript

1$(function(){ 2 $('.checkAll').click(function() { 3 $('.' + this.id).prop('checked', this.checked); 4 }); 5 $('input[type=checkbox]').click(function() { 6 if($('#' + $(this).prop('className'))[0]){ 7 var flg=true; 8 $('.' + $(this).prop('className')).each(function(){ 9 if(!$(this).prop('checked')){ flg=false}; 10 }); 11 $('#' + $(this).prop('className')).prop("checked",flg); 12 } 13 }); 14}); 15

PHP

1$data=[ 2 array("id_mbr"=>"a0","email_1_mbr"=>"a1","email_2_mbr"=>"a2"), 3 array("id_mbr"=>"b0","email_1_mbr"=>"b1","email_2_mbr"=>"b2"), 4 array("id_mbr"=>"c0","email_1_mbr"=>"c1","email_2_mbr"=>"c2"), 5 ]; 6foreach ($data as $key => $value) { 7print <<<eof 8<input type="checkbox" id="delete_{$value['id_mbr']}" class="checkAll" name="select_delete[]" value="{$value['id_mbr']}" >名前<br> 9<input type="checkbox" value="{$value["email_1_mbr"]}" class="delete_{$value['id_mbr']}"> メールアドレス1<br> 10<input type="checkbox" value="{$value["email_2_mbr"]}" class="delete_{$value['id_mbr']}">メールアドレス2<br> 11 12eof; 13} 14

追記2

ご希望と思われる仕様バージョン

javascript

1$(function(){ 2 $('.checkAll').click(function() { 3 $('.' + this.id).prop('checked', this.checked); 4 }); 5 $('input[type=checkbox]').click(function() { 6 if($('#' + $(this).prop('className'))[0]){ 7 var flg=false; 8 $('.' + $(this).prop('className')).each(function(){ 9 if($(this).prop('checked')){ flg=true}; 10 }); 11 $('#' + $(this).prop('className')).prop("checked",flg); 12 } 13 }); 14});

投稿2016/08/26 06:28

編集2016/08/26 07:10
yambejp

総合スコア114572

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

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

kans00229

2016/08/26 06:43

checkAllが未チェックの場合は、メール1とメール2のいずれかがチェックされたらcheckAllをチェックし、 メール1とメール2の両方のチェックを外した時には、checkAllのチェックも外れ、メール1とメール2のいずれかがチェックされている場合は、checkAllはチェックされたままの状態を考えております。 説明がわかりずらくて申し訳ありません。宜しくお願い致します。
yambejp

2016/08/26 06:46

「メール1とメール2のいずれかがチェックされたら」は片方だけなのにcheckAllがチェックされるというのは仕様としておかしくないですか?
kans00229

2016/08/26 07:12

ご説明が難しいのですが、 「名前」checkAllが親要素であり、メール1とメール2は子要素といったところでしょうか。 例えば、「名前」が佐藤さんがメールアドレス1と2を持っていて、送信メール先を選択する場合に、 ①佐藤さんがもっているすべてのメールアドレス(メール1,2) ②メールアドレス1 ③メールアドレス2 という選択があると思います。 親である佐藤さん(checkAll)を選択したときは、子である(メール1,2)も選択し、逆にメールアドレス1やメールアドレス2だけを選択された時は、親である佐藤さんのものだと紐づけたいと考えております。 (メール1,2)は必ず、どの親checkAllであるかを決めたいという思惑があります。 POSTした際に、checkAllのチェックがついているcheckAllの["id_mbr"]で、データベースよりデータを取得する仕様としておりまして、必ず、どのcheckAllの["id_mbr"]かが必要となります。 もっと効率的な仕様があると思われますが、私の知識では中々思いつかないところです。 もし、ご説明させて頂いたものの良い方法がございましたら、ご教授頂けますと幸いです。 お手数ではございますが、宜しくお願い致します。
yambejp

2016/08/26 07:20

一応2パターン書いときました
kans00229

2016/08/26 07:41

yambejp様 ご回答有難うございました。無事に解決致しました。本当にありがとうございました。
guest

0

初めに

初めまして、質問者さん

初めにphpのご質問でしたら、使っているwebサーバー(アパッチとか)とphpのバージョンをご記入した方がよいかもです。

結論

php

1<!-- data example 2<?php 3/* 4 * ちなみにご指定の手段ですと、入力内容(id_mbr)が日本語の場合、 5 * ID属性の値も日本語になりますが、よいのでしょうか? 6 */ 7 var $data = array ( 8 'id_01' => array( 9 id_mbr = '試験 太郎', 10 email_1_mbr = 'test2@example.com' 11 email_2_mbr = 'test2@example.com' 12 ) 13 ); 14?> 15--> 16<?php foreach ( $data as $key => $value) : ?> 17 <input type="checkbox" id="delete<?php echo $value['id_mbr'];?>" class="checkAll" name="select_delete[]" value="<?php echo $value['id_mbr'];?>" >名前 18 <input type="checkbox" value="<?php echo $value["email_1_mbr"]; ?>" class="delete<?php echo $value['id_mbr'];?>"> メールアドレス1<br> 19 <input type="checkbox" value="<?php echo $value["email_2_mbr"]; ?>" class="delete<?php echo $value['id_mbr'];?>">メールアドレス2<br> 20<?php endforeach; ?>

コメントに触発され、以下を追記

JavaScript

1/* 2 * class="checkAll"のidと同じclassを持つチェックボックスが連動してチェックされます。 3 * こちらの機能を実装する例です。 4 */ 5var $checkAll = $('.checkAll') 6$checkAll.on('click', function(){ 7 var $this = $(this); 8 var id = $this.attr('id'); 9 $('.' + id).prop('checked', $this.prop('checked')); 10});

説明

以下のサイトを引用して、回答いたしました。
foreachの説明サイト

foeeach文をhtml埋め込みのPHPで使う場合、このような感じで記入するそうです。

個人的には、PHPで動的にHTMLをお使いになる場合、smarty(PHP用HTMLエンジンライブラリ)を利用することをお勧めいたします。
smartyの日本語説明サイト
smartyの本家サイト(英語サイト)

最後になりましたが、見当違いな回答でありましたら、遠慮なく申し付けてくださいな。
改めて、対応いたします。

投稿2016/08/26 06:46

編集2016/08/26 07:10
tama_yn0815

総合スコア143

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

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

tama_yn0815

2016/08/26 07:00 編集

先に断わっておくと、PHPはサーバー側(javascriptなどブラウザ側では、実行されない)で、実行されます。 あくまでも、サーバーから応答する時に送信htmlファイルをPHPの実行結果に変えて、送信しています。 その辺りのご理解があると幸いです。
yambejp

2016/08/26 06:59

これって単純にphpはHTMLを書くためだけに使ってるだけではないでしょうか? じっさいの処理はjQueryでやりたいみたいに見えますけど
tama_yn0815

2016/08/26 07:02

yambejpさん なるほど!! 言われてハッと、気が付きます(笑) jQueryで行いたいのであれば、想定されるHTMLの例(PHPの実行結果)さえ、 頂ければ、後は、何とかなりそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問