jQuery – チェックボックスがチェックされたらスタイルを変更する

なんか久々にjQueryを触りました…。

セレクタ(属性フィルタ)に変数の値を利用する場合の記述を試したんですが、1.3.1はセレクタまわりが変更になっているからなのか、IE6,7、FirefoxでOKだったのですが、safariが動作せず。

で、ちょこっと調べてみると jQuery 1.3系からはsafari2は対応してないと。そういうことですか…。

jQuery: » jQuery 1.3.1 Released

ブラウザーのシュアの問題で対応をはずしてるみたいですね。しかし下記ページを見てsafari3.xが6%近いシェアがあるってのでびっくり。safariってそんなにも使ってる人いるんですかね?

Browser market share

まあ一応safari2.xもOKなように1.2.6を使っておきました。

作ったものはというと、チェックボックスにチェックをした時に文字のスタイルを変更するというもの。

jQuery – checkされたら文字を装飾する

ソースは以下。

<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<title>jQuery - checkされたら文字を装飾する</title>
<script type="text/javascript" src="../jquery-1.2.6.min.js"></script>
<script language="JavaScript">
$(function(){
	//リロード対応用
	//checked=tureのものすべて取得
	$("#chkform :checked").each(function(){
		//checkboxのidを取得
		var isl = $(this).attr("id");
		//labelに対しスタイル追加
		$("label[for="+isl+"]").css({"font-weight":"bold","color":"red"});
	});
	//checkboxがクリックされたら…
	$("#chkform :checkbox").click(function() {
		//checkboxのidを取得
		var isl = $(this).attr("id");
		if($(this).attr('checked') == true) {
			//checked=tureであればスタイル追加
			$("label[for="+isl+"]").css({"font-weight":"bold","color":"red"});
		} else {
			//checked=tureでなければスタイルを空に
			$("label[for="+isl+"]").css({"font-weight":"","color":""});
		}
	});
});
</script>
</head>
<body>
<h1>jQuery - checkされたら文字を装飾する</h1>
<p>好きな動物は?(複数選択可)</p>
<form id="chkform">
<table>
<tr>
<td><input type="checkbox" name="chk&#91;&#93;" value="1" id="chk1"></td>
<td><label for="chk1">犬</label></td>
</tr>
<tr>
<td><input type="checkbox" name="chk&#91;&#93;" value="2" id="chk2"></td>
<td><label for="chk2">猫</label></td>
</tr>
<tr>
<td><input type="checkbox" name="chk&#91;&#93;" value="3" id="chk3"></td>
<td><label for="chk3">鳥</label></td>
</tr>
<tr>
<td><input type="checkbox" name="chk&#91;&#93;" value="4" id="chk4"></td>
<td><label for="chk4">パンダ</label></td>
</tr>
<tr>
<td><input type="checkbox" name="chk&#91;&#93;" value="5" id="chk5"></td>
<td><label for="chk5">トラ</label></td>
</tr>
<tr>
<td><input type="checkbox" name="chk&#91;&#93;" value="6" id="chk6"></td>
<td><label for="chk6">ライオン</label></td>
</tr>
</table>
</form>
</body>
</html>

チェックされたcheckboxのidを取得し、割り当てられたlabelに対してスタイルを追加しています。スタイルシートをつけるとソースが長くなるので、あえて「.css」を使っています。

セレクタ(属性フィルタ)に対して変数を割り当てる方法がわかっていなかったのですが、変数以外を「”」で囲む「$(“[属性=”+変数+”]”)」でいけるようです(なんか無理矢理な感じがするけど…)。

フォームのradio、checkboxは選択してもわかりにくいことが多いので、少し手を加えてやるだけでわかりやすくなると思います。

CSS3も「:checked」はありますが、実用には最短3年ぐらい(IE6,7が少なくなる)と考えると、jQueryとかで補っていった方がいいですね。

しかしずいぶんjQuery触ってないので、また練習がてらなにか作らねば。

参考ページ
jQueryのセレクタ 属性フィルタ1 – [JavaScript]All About

Googleがおかしい?

なんかGoogleの検索結果すべてに「このサイトはコンピュータに損害を与える可能性があります。」とのメッセージが…。

なんか障害か、内部の不具合でもあったのかな?

※追記
1時間くらいで直りまた。なにがあったんでしょう?

「リキッドレイアウト」と「ソリッドレイアウト」、どちらがいいか?

「リキッドレイアウト(可変型レイアウト)」と「ソリッドレイアウト(固定型レイアウト)」について、今月いろいろなブログで記事がかかれていました。

なにかレイアウト自体の是非を問うような記事をちらほらみかけたのですが、どちらちらもいい所と悪い所があると思うので、個々のWEBサイトの『目的』から考えるべきかと。

レイアウト自体の是非を問うのは「Flashで全画面はありか、なしか」といっているようなもの。

イメージ先行型のサイト、ブランドの向上等が優先目的となる場合、請求力のあるデザインを落とし込もうとすればFlashで全画面の選択は当然のごとくありますが、お役所のサイトのような「掲載内容がしっかり伝わる(文章をしっかり読める)」ことを優先目的とした場合、ブラウザが全画面に広がること自体を嫌がる人も多いので、Flashで全画面の選択は考えられない。

ただ考えるべきは『サイトの目的が達成できるかどうか』ということで、目的を達成するための選択をしっかりするということだけではないでしょうか?

WEBサイトでは誰が見ても100%満足する、というのはあり得ないと思っています。スキルの有無、色の好き嫌い、文字を読むのが嫌な人、読み込みが遅いとすぐいらいらする人など、十人十色で何らかの不満があってあたりまえ。

だからこそ目的をしっかり考え、ターゲットを絞ったりしながら、目標を定めしっかり達成できるよう作成し手直ししていく。

きちんとした選択ができるよう、いろいろな人の意見を聞きながら幅を広げていかねば!と改めて感じました。

(とかいいながら、ブラウザー統一してくれ、文字コード一つになれ、携帯規格統一しろ、とか、いろいろ愚痴ってしまう今日この頃…)

  • Category : 雑記
  • Tags :