前提・実現したいこと
PHP,MySQL,bootstrap3を使用しています。
下記画像のようなテーブルで、対象にチェックをいれて
データを更新するのですが、資格のところに違うものが
入っていれば「混在していますよ」というエラーを
POSTする前に行いたいと考えています。
もし実現可能であれば、JQueryか、Javascriptだと思うのですが、
1、実現は可能でしょうか?
2、可能な場合、何を使いますか?
3、参考になるサイトとかありますか?
なんとなく出来そうな気がしますが、検索ワードも思いつきません。
ご存知の方、ご指導お願い申し上げます。
*プログラムを追加させていただきます。
<div class="col-xs-12">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th nowrap="">対象</th>
<th> </th>
<th nowrap="">所属部署</th>
<th nowrap="">名前</th>
<th nowrap="">資格</th>
</tr>
</thead>
<tbody>
<tr>
<td><div class="text-center"><input type="checkbox" name="sentaku[]" value="1"></div></td>
<td><div class="text-center"><button type="button" class="btn btn-default btn-xs" onclick="viewJump('1');">詳細</button></div></td>
<td nowrap>総務経理部</td>
<td nowrap>山田 いちろう</td>
<td nowrap>FP2</td>
</tr>
<tr>
<td><div class="text-center"><input type="checkbox" name="sentaku[]" value="2"></div></td>
<td><div class="text-center"><button type="button" class="btn btn-default btn-xs" onclick="viewJump('2');">詳細</button></div></td>
<td nowrap>総務経理部</td>
<td nowrap>山田 二郎</td>
<td nowrap>FP2</td>
</tr>
<tr>
<td><div class="text-center"><input type="checkbox" name="sentaku[]" value="3"></div></td>
<td><div class="text-center"><button type="button" class="btn btn-default btn-xs" onclick="viewJump('3');">詳細</button></div></td>
<td nowrap>総務経理部</td>
<td nowrap>山田 三郎</td>
<td nowrap>FP1</td>
</tr>
<tr>
<td><div class="text-center"><input type="checkbox" name="sentaku[]" value="4"></div></td>
<td><div class="text-center"><button type="button" class="btn btn-default btn-xs" onclick="viewJump('4');">詳細</button></div></td>
<td nowrap>総務経理部</td>
<td nowrap>田中 四郎</td>
<td nowrap>FP2</td>
</tr>
<tr>
<td><div class="text-center"><input type="checkbox" name="sentaku[]" value="5"></div></td>
<td><div class="text-center"><button type="button" class="btn btn-default btn-xs" onclick="viewJump('5');">詳細</button></div></td>
<td nowrap>総務経理部</td>
<td nowrap>井上 五郎</td>
<td nowrap>FP2</td>
</tr>
<tr>
<td><div class="text-center"><input type="checkbox" name="sentaku[]" value="6"></div></td>
<td><div class="text-center"><button type="button" class="btn btn-default btn-xs" onclick="viewJump('6');">詳細</button></div></td>
<td nowrap>総務経理部</td>
<td nowrap>佐藤 花子</td>
<td nowrap>FP1</td>
</tr>
</tbody>
</table>
</div>
</div> <!-- col-xs-12 -->
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
対象にチェックを入れたとして、あとどの部分がユーザーの入力可能部分なのでしょうか?
あと対象と資格を具体的にどのように紐付けていますか?
(nameやidで処理?)
そのあたりがわかるソースを追記されたほうがよろしいかと
追記
対象と資格の間に紐付けがないと言っていますが、相関関係をはっきりさせておかないと
データ更新できないと思いますが・・・
taishoやsikakuには連番をふって、taishoのvalueにレコードのidを入れると
SQL側に処理させやすいと思います。
なお、今回のケースについてajaxが適当かどうかはもう少し詳しく状況をきいてみないとわかりません
<script>
$(function(){
$('input[type=button][value=check]').on('click',function(){
var x=[];
var y=[];
$('[type=checkbox]:checked').filter(function(i,j){if(r=j.name.match(/taisho\[(\d+)\]/)) x.push(r[1]);});
for(var i=0;i<x.length;i++){
y.push($('[type=text][name="sikaku['+x[i]+']"').val());
}
var z=y.filter(function (x, i, self) {
return self.indexOf(x) === i;
});
console.log(z)
if(z.length==0){alert('一つもチェックされてない');}
if(z.length==1){alert('資格は1種類');}
if(z.length>1){alert('資格は複数');}
});
});
</script>
<form>
<input type="checkbox" name="taisho[0]" value="10"><input type="text" name="sikaku[0]" value="FP1"><br>
<input type="checkbox" name="taisho[1]" value="12"><input type="text" name="sikaku[1]" value="FP1"><br>
<input type="checkbox" name="taisho[2]" value="15"><input type="text" name="sikaku[2]" value="FP2"><br>
<input type="checkbox" name="taisho[3]" value="18"><input type="text" name="sikaku[3]" value="FP1"><br>
<input type="button" value="check">
</form>
ajax版
補足を見る限り以下のように、taishoのチェックされたvalだけ拾ってpostでcheck用phpに流し
そこでSQLでcount(*)を取ればよいかなと
<script>
$(function(){
$('input[type=button][value=check]').on('click',function(){
var x=[];
$('[type=checkbox][name="taisho[]"]:checked').each(function(){
x.push($(this).val());
});
$.ajax({
url:"check.php",
type:"post",
data:{taisho:x},
dataType:"text",
success:function(data){
console.log(data);
},
error:function(data,txt){
console.log(txt);
},
});
});
});
</script>
<form>
<input type="checkbox" name="taisho[]" value="10">FP1<br>
<input type="checkbox" name="taisho[]" value="12">FP1<br>
<input type="checkbox" name="taisho[]" value="15">FP2<br>
<input type="checkbox" name="taisho[]" value="18">FP1<br>
<input type="button" value="check">
</form>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
帰ってから回答しようと思っていたら解決していた・・・。とりあえず書きかけていたので置いておきます。
提示されたテーブルのまま「同じ資格のみしかクリックできない」をするコードです。
$( _=> {
$( 'table' ).each( ( i, element ) => {
const licenses = $( 'tr > td:last-child', element ).map( ( i, e ) => $( e ).text() ).get().filter( ( x, i, self ) => self.indexOf( x ) === i );
const $_tr = $( 'tr', element ).each( ( i, element ) => {
const val = $( 'td:last-child', element ).text();
if ( !val ) { return; }
$( element ).data( 'lid', 'l' + licenses.indexOf( val ) );
} );
let flagg = false;
$( 'input', element ).on( 'change', ( ev ) => {
const $_self = $( ev.target );
const lid = $_self.parents( 'tr' ).data( 'lid' );
if ( flagg && lid !== flagg ) {
// error!
alert( 'Not equal!' );
$_self.prop( 'checked', false );
} else if ( !flagg && $_self.prop( 'checked' ) ) {
flagg = lid;
} else if ( flagg && !$_self.prop( 'checked' ) ) {
flagg = false;
}
} ).change();
} );
} );
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kei344
2017/01/30 18:19
具体的に出力されたHTML(ブラウザで「ページのソースを表示」)を質問文に追記いただいたほうが回答を得られやすいと思います。
tsuru0508
2017/01/30 18:33
ありがとうございます。後ほど、貼り付けさせて頂きます。申し訳ありません。
tsuru0508
2017/01/30 20:02
先ほどソースを貼り付けさせていただきました。