以下のように、1行に1チェックボックスがあります。
(1) 各行のどこかをクリックするたびにチェックボックスのON/OFFを切り替え
(2) チェックボックスがONである間は、行全体の背景を黄色に塗りつぶす
(チェックが解除されたら黄色着色も解除)
といった動作をさせたいのですが、記述方法をご教示いただけますと幸いです。
<table>
<tr>
<td>1</td>
<td>東京</td>
<td><input type="checkbox" name="myvalue" value="1"></td>
</tr>
<tr>
<td>2</td>
<td>神奈川</td>
<td><input type="checkbox" name="myvalue" value="2"></td>
</tr>
<tr>
<td>3</td>
<td>千葉</td>
<td><input type="checkbox" name="myvalue" value="3"></td>
</tr>
</table>
No.6ベストアンサー
- 回答日時:
だからきっと、おれは、むだにかいとうがおおいのだろうなぁ~^^;
おっちょこよいってのもかなりあるが・・・。
もうあとは、めでながれをおっておくれ!
なにがきっかけで、なにをあつめて、なにをしているのか
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title>サンプル</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="content-style-type" content="text/css">
<style type="text/css">
.chkOn { background-color: #ff0; }
.chkOff { background-color: #fff; }
</style>
</head>
<body>
<form method="post" action="sample.php">
<table border="1" cellpadding="3" style="border-collapse: collapse;">
<tr class="chkOff">
<td align="center">1</td>
<td>神奈川</td>
<td>かながわ</td>
<td><label><input type="checkbox" name="myFlg[]" value="1"> 設定</label>
</tr>
<tr class="chkOff">
<td align="center">2</td>
<td>千葉</td>
<td>ちば</td>
<td><label><input type="checkbox" name="myFlg[]" value="2"> 設定</label>
</tr>
</table>
<input type="submit" name="exec" value="登録">
</form>
<script type="text/javascript">
//@cc_on
TokenList = (function ( cut, has, join ) {
return function ( type ) {
return {
'remove':
function ( e, name ) {
var keys = cut( name );
var buf = [ ], cnt, key;
for( cnt = 0; key = keys[ cnt++ ]; )
! has( e[ type ], key ) && buf.push( key );
e[ type ] = join( buf );
return buf;
},
'toggle':
function ( e, name ) {
var keys = cut( name );
var aBuf = [ ], dBuf = [ ];
var key, cnt;
for( cnt = 0; key = keys[ cnt++ ]; ) {
has( e[ type ], key ) ?
dBuf.push( key ): aBuf.push( key );
}
e[ type ] = join( dBuf );
if( aBuf.length )
this.remove( e, join( aBuf ) );
return e[ type ];
}
};
};
})(
function (s) { return ('' + s).split( /\u0020+/ ); },
function (s, n) { return -1 < ( '\u0020' + s +'\u0020' ).indexOf( '\u0020' + n + '\u0020' ); },
function (a) { return a.join( '\u0020' ); }
);
var eventHandler = (function ( CSS, get, get2, rev ) {
return function ( evt ) {
var e = evt./*@if(1) srcElement @else@*/ target /*@end@*/;
var p = get( e, 'nodeName', 'TR' );
var c;
if( p ) {
c = get2( p, 'name', 'myFlg[]' );
if( c.length ) {
if( 'INPUT' !== e.nodeName || 'checkbox' !== e.type) rev( c );
CSS.toggle( p, 'chkOn chkOff' );
}
}
};
})(
TokenList( 'className' ),
function ( n, t, v ) {
return n ? (v == n[t]) ? n: arguments.callee( n.parentNode, t, v): null;
},
function ( node, type, val, depth ) {
var n = node.firstChild;
var d = n ? 1: 0;
var buf = [ ];
var m;
if( 'undefined' === typeof depth || 1 > depth )
depth = 99;
while( d ) {
if( n[ type ] == val ) buf.push( n );
m = n;
if( d < depth && ( n = n.firstChild ) )
d += 1;
else
while( !( n = m.nextSibling ) && --d && (m = m.parentNode) );
}
return buf;
},
function ( a ) {
for( var cnt = 0, o; o = a[ cnt++ ]; )
if( 'checkbox' == o.type )
o.checked = !o.checked;
}
);
document./*@if( @_jscript )
attachEvent( 'on' + @else@*/
addEventListener( /*@end@*/ 'click', eventHandler, false );
</script>
</body>
</html>
babu_babooさん、たびたびのご教示本当にありがとうございました
m(_ _)m m(_ _)m m(_ _)m
本番環境でも元気に動きました。
同時に、Javascriptをこんなに自由自在に操れたら
どんなにHTMLプログラミングが楽しいだろう、とも思いました。
ともかく、本件は何度も応用が利くもので大変有益なスクリプトを
組んでいただきましたので、永久保存版にさせていただきます!
本当にありがとうございました!!
&今後ともよろしくお願い致します(^^;
No.5
- 回答日時:
じょうぶな、ぷろぐらむ。
へんこうにつよい、ぷろぐらむ。
を、こころがけてはいますが、
きめうちは、よくなかったですね^^;
おやをみつけるのはたやすいのですが、
こをさがしだすのはめんどうで、さけてました。
そこでかいてみました。こうりつわるそう。
だれか、すまーとにかいてくれないかしら?
(get2)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title></title>
<style type="text/css">
.chkOn { background-color: #ff0; }
.chkOff { background-color: #fff; }
</style>
<body>
<table>
<tr class="chkOff">
<td>1</td>
<td>東京</td>
<td><input type="checkbox" name="myvalue" value="1"></td>
</tr>
<tr class="chkOff">
<td>2</td>
<td>神奈川</td>
<td><input type="checkbox" name="myvalue" value="2"></td>
</tr>
<tr class="chkOff">
<td>3</td>
<td>千葉</td>
<td><input type="checkbox" name="myvalue" value="3"></td>
</tr>
</table>
<div id="p" class="ab ef ij">euwuiacbhuibac</div>
<script type="text/javascript">
//@cc_on
TokenList = (function ( cut, has, join ) {
return function ( type ) {
return {
'remove':
function ( e, name ) {
var keys = cut( name );
var buf = [ ], cnt, key;
for( cnt = 0; key = keys[ cnt++ ]; )
! has( e[ type ], key ) && buf.push( key );
e[ type ] = join( buf );
return buf;
},
'toggle':
function ( e, name ) {
var keys = cut( name );
var aBuf = [ ], dBuf = [ ];
var key, cnt;
for( cnt = 0; key = keys[ cnt++ ]; ) {
has( e[ type ], key ) ?
dBuf.push( key ): aBuf.push( key );
}
e[ type ] = join( dBuf );
if( aBuf.length )
this.remove( e, join( aBuf ) );
return e[ type ];
}
};
};
})(
function (s) { return ('' + s).split( /\u0020+/ ); },
function (s, n) { return -1 < ( '\u0020' + s +'\u0020' ).indexOf( '\u0020' + n + '\u0020' ); },
function (a) { return a.join( '\u0020' ); }
);
var eventHandler = (function ( CSS, get, get2, rev ) {
return function ( evt ) {
var e = evt./*@if(1) srcElement @else@*/ target /*@end@*/;
var p = get( e, 'nodeName', 'TR' );
if( p ) {
rev( get2( p, 'name', 'myvalue' ) );
CSS.toggle( p, 'chkOn chkOff' );
}
};
})(
TokenList( 'className' ),
function ( n, t, v ) {
return n ? (v == n[t]) ? n: arguments.callee( n.parentNode, t, v): null;
},
function ( node, type, val, depth ) {
var n = node.firstChild;
var d = n ? 1: 0;
var buf = [ ];
var m;
if( 'undefined' === typeof depth || 1 > depth )
depth = 99;
while( d ) {
if( n[ type ] == val ) buf.push( n );
m = n;
if( d < depth && ( n = n.firstChild ) )
d += 1;
else
while( !( n = m.nextSibling ) && --d && (m = m.parentNode) );
}
return buf;
},
function ( a ) {
for( var cnt = 0, o; o = a[ cnt++ ]; )
if( 'checkbox' == o.type )
o.checked = !o.checked;
}
);
document./*@if( @_jscript )
attachEvent( 'on' + @else@*/
addEventListener( /*@end@*/ 'click', eventHandler, false );
</script>
babu_babooさん、たびたびのご教示ありがとうございます。
再度ご提示下さったスクリプト、そのまま試すと
やはりばっちりでしたが、本番環境に入れてみると
(1) セルクリックでの行着色はOKで、
(2) チェックON/OFFでの行着色の連動もOKなのですが、
(3) セルクリックでチェックON/OFFが利きません。
特にIE8がスクリプトエラーを吐くことはございません。
ええっと、本番環境は、セルが4列あるテーブルなのですが、
それがいけないのでしょうか。
すみません、訂正箇所にさっぱり見当がつかないのですが。。。
すみません、なにとぞご教示いただけますと幸いです。
No.4
- 回答日時:
c = p.cells[2].firstChild;
これが、せるの3ばんめのさいしょののーど。
なので4ばんめの、らべるの、さらに、さいしょののーどを・・・・。
いっぱいもうけたら、わけまえください^^;
No.3
- 回答日時:
ごめん!きょうも、さえてない。
。。1のじょうけんを、みたしていませんでした。
ちょっとclassListをかきなおして
tokenListもどきにしてみました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title></title>
<style type="text/css">
.chkOn { background-color: #ff0; }
.chkOff { background-color: #fff; }
</style>
<body>
<table>
<tr class="chkOff">
<td>1</td>
<td>東京</td>
<td><input type="checkbox" name="myvalue" value="1"></td>
</tr>
<tr class="chkOff">
<td>2</td>
<td>神奈川</td>
<td><input type="checkbox" name="myvalue" value="2"></td>
</tr>
<tr class="chkOff">
<td>3</td>
<td>千葉</td>
<td><input type="checkbox" name="myvalue" value="3"></td>
</tr>
</table>
<div id="p" class="ab ef ij">euwuiacbhuibac</div>
<script type="text/javascript">
//@cc_on
TokenList = (function ( cut, has, join ) {
return function ( type ) {
return {
'contains':
function ( e, name ) {
if( !has( e[ type ], name ) ) {
var keys = cut( name );
var cnt, key;
for( cnt = 0; key = keys[ cnt++ ]; )
if( has( e[ type ], key ) ) return false;
}
return true;
},
'add':
function ( e, name ) {
var keys = cut( name );
var buf = [ ], cnt, key;
for( cnt = 0; key = keys[ cnt++ ]; )
has( e[ type ], key ) && buf.push( key );
e[ type ] = ( e[ type ] ? '\u0020': '' ) + join( buf );
return buf;
},
'remove':
function ( e, name ) {
var keys = cut( name );
var buf = [ ], cnt, key;
for( cnt = 0; key = keys[ cnt++ ]; )
! has( e[ type ], key ) && buf.push( key );
e[ type ] = join( buf );
return buf;
},
'toggle':
function ( e, name ) {
var keys = cut( name );
var aBuf = [ ], dBuf = [ ];
var key, cnt;
for( cnt = 0; key = keys[ cnt++ ]; ) {
has( e[ type ], key ) ?
dBuf.push( key ): aBuf.push( key );
}
e[ type ] = join( dBuf );
if( aBuf.length )
this.remove( e, join( aBuf ) );
return e[ type ];
},
'length':
function ( e ) {
return cut( e[ type ] ).length;
},
'item':
function ( e, num ) {
var a = cut( e[ type ] ) || [];
return 'undefined' === typeof num ? a: a[ num ];
}
};
};
})(
function (s) { return ('' + s).split( /\u0020+/ ); },
function (s, n) { return -1 < ( '\u0020' + s +'\u0020' ).indexOf( '\u0020' + n + '\u0020' ); },
function (a) { return a.join( '\u0020' ); }
);
var eventHandler = (function ( CSS, get ) {
return function ( evt ) {
var e = evt./*@if(1) srcElement @else@*/ target /*@end@*/;
var p = get( e, 'nodeName', 'TR' );
var c;
if( p ) {
c = p.cells[2].firstChild;
do {
if( c.nodeName == 'INPUT' && c.type=='checkbox' ) {
e != c && (c.checked = !c.checked);
CSS.toggle( p, 'chkOn chkOff' );
c = null;
break;
}
c = c.nextSibiling;
} while ( c );
}
};
})(
TokenList( 'className' ),
function ( n, t, v ) {
return n ? (v == n[t]) ? n: arguments.callee( n.parentNode, t, v): null;
},
function ( n, t, v ) {
var node = n.childNode;
}
);
document./*@if( @_jscript )
attachEvent( 'on' + @else@*/
addEventListener( /*@end@*/ 'click', eventHandler, false );
</script>
つっこみだいかんげいです。
この回答への補足
babu_babooさん、懇切丁寧にご教示いただきありがとうございます。
大変なスクリプトを書き下ろしていただき、まことに恐縮です。
(お金払わないとバチがあたりそうですね、、、)
#3でのご提示のサンプルでは、完璧な動作確認をさせていただくことが
できたのですが、本番環境に組み込んでみたところ、なぜかうごきません、、、
本番環境のソースを骨と皮だけにしてみたのが以下です。
ご提示のサンプルの<div id="p" class="ab ef ij">euwuiacbhuibac</div>だけはずしてあります。
原因お心当たりございますでしょうか。
(もちろん全角スペースはtabに置き換えてます。)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title>サンプル</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="content-style-type" content="text/css">
<!--////////////////////////////////////////////////////////////-->
<!--////ここに、#3の<script>から</script>と /////////////////-->
<!--//// <style>から</style>を挿入しました。 ////-->
<!--////////////////////////////////////////////////////////////-->
</head>
<body>
<form method="post" action="sample.php">
<table border="1" cellpadding="3" style="border-collapse: collapse;">
<tr class="chkOff">
<td align="center">1</td>
<td>神奈川</td>
<td>かながわ</td>
<td><label><input type="checkbox" name="myFlg[]" value="1"> 設定</label>
</tr>
<tr class="chkOff">
<td align="center">2</td>
<td>千葉</td>
<td>ちば</td>
<td><label><input type="checkbox" name="myFlg[]" value="2"> 設定</label>
</tr>
</table>
<input type="submit" name="exec" value="登録">
</form>
</body>
</html>
No.2
- 回答日時:
みじかいのなら
document.onclick=function(e){
with(event.srcElement||e.target)
name=='myvalue'&&
parentNode.parentNode.style.backgroundColor=
checked?'#ff0':'';
}
のはどうでしょう?
かいぎょうしなければ、1ぎょうです。
ながいほうは、TRにくらすをしていして
CSS.toggle( p, 'chkOn chkOff' )で
こうごにへんかんします
ベータばんのひょうじだと、1ぎょうにながくかくと
みためがわるいので、こまかくかいぎょうをいれました
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title></title>
<style type="text/css">
.chkOn { background-color: #ff0; }
.chkOff { background-color: #fff; }
</style>
<body>
<table>
<tr class="chkOff">
<td>1</td>
<td>東京</td>
<td><input type="checkbox" name="myvalue" value="1"></td>
</tr>
<tr class="chkOff">
<td>2</td>
<td>神奈川</td>
<td><input type="checkbox" name="myvalue" value="2"></td>
</tr>
<tr class="chkOff">
<td>3</td>
<td>千葉</td>
<td><input type="checkbox" name="myvalue" value="3"></td>
</tr>
</table>
<script type="text/javascript">
//@cc_on
var ClassList = {
'remove' : function ( node, css ) {
var keys = node.className.split( / +/ )
var str = ' ' + css + ' ';
var buf = [ ], key, i;
for( i = 0; key = keys[ i++ ]; ) {
if( 0 > str.indexOf( ' ' + key + ' ' ) )
buf.push( key );
}
node.className = buf.join( ' ' );
return buf;
},
'toggle' : function ( node, css ) {
var keys = css.split( / +/ );
var str = ' ' + node.className + ' ';
var buf = [ ], key, i;
for( i = 0; key = keys[ i++ ]; ) {
if( 0 > str.indexOf(' '+ key +' ') )
str += key + ' '
else
buf.push( key );
}
node.className = str;
if( buf.length )
this.remove( node, buf.join( ' ' ) );
return node.className;
}
};
var eventHandler = (function ( CSS, get ) {
return function ( evt ) {
var e = evt./*@if(1) srcElement @else@*/ target /*@end@*/;
var doc = e.ownerDocument || document;
var p;
if( e.name == 'myvalue' ) {
p = get( e, 'nodeName', 'TR' );
if( p ) CSS.toggle( p, 'chkOn chkOff' );
}
};
})(
ClassList,
function ( n, t, v ) {
return n ? (v == n[t]) ? n: arguments.callee(n.parentNode, t, v): null;
}
);
document./*@if( @_jscript )
attachEvent( 'on' + @else@*/
addEventListener( /*@end@*/
'click', eventHandler, false
);
</script>
No.1
- 回答日時:
━━Sample::Start━━━━━━━━━━━━━━━━━━━━━━
<html>
<head>
<style type="text/css">
table#AA tr {
background-color: #ffa;
}
</style>
<script type="text/javascript">
<!--
checkFlag = [];
var obj = '';
function test1(num){
if(num == 0){
obj = document.getElementById('AA1');
}
else if(num == 1){
obj = document.getElementById('AA2');
}
else if(num == 2){
obj = document.getElementById('AA3');
}
if(obj && obj.style){
if(checkFlag[num]){
obj.style.backgroundColor = '#ffa';
checkFlag[num] = 0;
}
else{
obj.style.backgroundColor = '#faa';
checkFlag[num] = 1;
}
}
};
//-->
</script>
</head>
<body>
<form name="form1">
<table id="AA" border="1" width="600">
<tr id="AA1"><td>1 :東京</td><td><input type="checkbox" name="myvalue" onClick="test1(0)"></input></td></tr>
<tr id="AA2"><td>2 :神奈川</td><td><input type="checkbox" name="myvalue" onClick="test1(1)"></input></td></tr>
<tr id="AA3"><td>3 :千葉</td><td><input type="checkbox" name="myvalue" onClick="test1(2)"></input></td></tr>
</table>
</form>
</body>
</html>
━━Sample::Endd━━━━━━━━━━━━━━━━━━━━━━━
こんな感じなるはずです?
JavaScriptでCSSを書き換えるので、ブラウザのver.がある程度新しいヤツじゃないと動作しません。
他にも方法があると思いますが、取り急ぎのサンプルとして。
4017Bさん、ご回答ありがとうございました。
チェックボックスへのチェックの有無によって
行全体が着色されるサンプルをありがとうございます。
想像以上に高度なスクリプトでした。本当に恐縮です。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Perl PERL 1 2022/04/26 14:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ラジオボタンが選択されたらテ...
-
画面の2重起動をチェックする...
-
文字数を数える際に空白、改行...
-
VBSでの自動ログイン
-
入力チェックの外部スクリプト...
-
同一nameの input type="text"...
-
JavaScriptの「.querySelectorA...
-
Javascriptの電卓で最初の何も...
-
チェックボックス付きのテーブ...
-
動的に生成されるラジオボタン...
-
正規表現で複数マッチ条件で悩...
-
マウスをブラウザの外に出した...
-
<JavaScript>tableタグを入力不...
-
return trueとreturn falseの用...
-
プルダウン 項目が多いので先頭...
-
hiddenのvalueの値を変えたい
-
【jsp/Java】チェックボックス...
-
Javascriptでのbuttonのname属...
-
onchangeイベントを強制的に発...
-
javascript作成してます。ラジ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックス付きのテーブ...
-
画面表示とともにtableの指定の...
-
JavaScriptの「.querySelectorA...
-
Javascriptの電卓で最初の何も...
-
localStorageでのcheckbox制御
-
文字数を数える際に空白、改行...
-
テーブル内のチェックボックス...
-
クリックしたラジオボタンの行...
-
複数のselect値で1つも選択され...
-
jQueryで合計を出したい
-
送信ボタン連打を抑止したいです
-
ラジオボタンが選択されたらテ...
-
ラジオボタンを一括で操作する...
-
formで項目を連結したい
-
javascriptで表(テーブル)の自...
-
同一nameの input type="text"...
-
動的に生成されるラジオボタン...
-
ボタンクリックでフォーカス移動
-
JavaScriptによる自動計算フォーム
-
選択したテーブルのセルの背景...
おすすめ情報