SQLの窓

2014年10月24日


jQuery と HTML5 で、FORM 送信のテンプレート

WEBアプリケーションとして、FORM の送信処理を標準の JavaScript だけで記述するのと、jQuery 主体で記述するのはかなり違うものになります。また、日付処理にしてもまだまだ標準の HTML ではサポートしきれませんし、日付の論理チェックを イザ JavaScript で記述するにしても結構面倒です。

補足) .ready() / DOMが完全にロードされたときの処理

.ready() の書き方として公式のドキュメントではまったく同じ機能だとして以下の3つを提示しています。
$( document ).ready( handler )
$().ready( handler ) (this is not recommended)
$( handler )
真ん中の処理は、『推奨しない』とありますが、最後の処理はシンプルですが、.ready() と同じです
( 原文 : All three of the following syntaxes are equivalent )

関連する記事

FORM の送信と JavaScript

最近やっと、HTML5 の新しい属性を使って FORM の処理をサポート可能になってきました( スマホのブラウザは未確認ですが )。ですから、FORM + jQuery + jQyery UI + datepicker + JavaScript + HTML5 というようなテンプレートを作成しました。

FORM の submit イベント

jQuery でこの処理を書くとすると、$( "form" ).submit(function( event ) { 処理 }); という記述になります。ここでは、セレクタとして ID を指定していますが、一般的な一つのフォームを持つページであれば、セレクタは form で十分です。

この時、条件によってサーバへの送信をキャンセルする処理が、event.preventDefault(); となります。( 一般の JavaScript ですと、onsubmit イベント内で、false を戻す処理にあたります )
	// ***********************************************
	// 更新ボタンがクリックされた時のみ確認
	// ***********************************************
	$( "#target_form" ).submit(function( event ) {

		// 日付妥当性チェック
		if ( !($( "#syainBirth" ).val().isDate()) ) {
			alert("日付が正しくありません");
			$( "#syainBirth" )
			.select()
			.focus();
			event.preventDefault();
			return;
		}


		if ( $(this).data("button_target") == "更新" ) {

			if ( !confirm("更新してよろしいですか?") ) {
				event.preventDefault();
				return;
			}

		}
	});
さらに、このテンプレートでは submit ボタンが複数あるので、『処理』の中でどちらのボタンが押されたかを知る為に、submit ボタンの onclick イベントで FORM にボタンの文字列をユーザデータとしてセットして利用しています。
	// ***********************************************
	// submit ボタンのクリックイベント
	// ***********************************************
	$("input[type='submit']").click( function( event ){
		$( "#target_form" )
			// 押されたボタンの文字列を FORM の内部データとして保存
			.data("button_target", event.currentTarget.value);
	});
submit ボタンに対するセレクタは input[type='submit'] という属性の値による一致で作成しています。その他の FORM の中にある input 要素等も、サーバに送る為には name属性を必ず指定します。ですから、それぞれの入力要素を参照するには、同様に input[name='名前'] で参照すればいいでしょう。

補足) input 要素で form の送信属性を上書き
input 要素 - HTML | MDN

1) formaction ( ※ 送り先アプリケーションを変更できます )
2) formenctype ( ※ ファイルアップロードボタンを追加できます )
3) formmethod ( ※ GET と POST を切りかえる事ができます )
4) formtarget ( ※ 送り先ウインドウを変更できます / 例) 送り先を IFRAME に切り替える )
jQuery UI + datepicker で日付入力支援 jQuery UI の datepicker を使うと、日付入力が容易になりますが、オプションの設定がそれなりに面倒なので、このテンプレートを基本に変更するといいと思います。また、手入力も可能なので、HTML5 の pattern 属性で日付フォーマットの入力を強制しています。
<input class="pass2"
	type="text"
	name="syainBirth"
	id="syainBirth"
	value=""
	pattern="^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2}$"
	maxlength="10"
	style="">

さらに、正しい日付である必要を考慮する場合の為に、String オブジェクトに isDate メソッドを追加しています。

HTML5 の属性の利用

数字の入力が必要な場合は、type 属性を number にすると簡単ですが、ブラウザによっては 数字を変更するコントロールがフィールドに追加されるので、『給与』フィールドは pattern 属性でチェックしています。
但しスマホなどでは、タップすると入力システムが開きますが、number 指定しておくと最初からテンキーが開くようなので、利用価値が大きいです。
※ 実際問題として、type="tel" が正解のようです(number だと数字を連続入力すると他の文字に変換されてしまいます)。


社員コードは必須入力なので、ページがロードされた時に jQuery から required を設定しています。これは、pattern のように HTML で記述してもいいですが、必須に関してはアプリ作成の初期段階のテスト時にはチェックして欲しく無い場合も多いので、動的にセットしています。 その他 キャンセルボタンは、入力チェックの発生しない通常ボタンを使用しています。 このサンプルでは、誰でもすぐ試せるように、Google がホスティングしている jQuery を使用しています。 ▼ 実際の実行
社員コード
氏名
性別
生年月日
給与

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>
<script type="text/javascript">
// ***********************************************
// jQuery UI datepicker 用デフォルトオプション
// ***********************************************
var datepicker_option = {
	dateFormat: 'yy/mm/dd',
	dayNamesMin: ['日', '月', '火', '水', '木', '金', '土'],
	monthNames:  ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
	showMonthAfterYear: true,
	yearSuffix: '年',
	changeYear: true,
	showAnim: 'fadeIn',
	yearRange: "1950:2014"
}

$(function() {

	// ***********************************************
	// submit ボタンのクリックイベント
	// ***********************************************
	$("input[type='submit']").click( function( event ){
		$( "#target_form" )
			// 押されたボタンの文字列を FORM の内部データとして保存
			.data("button_target", event.currentTarget.value);
	});

	// ***********************************************
	// 更新ボタンがクリックされた時のみ確認
	// ***********************************************
	$( "#target_form" ).submit(function( event ) {

		// 日付妥当性チェック
		if ( !($( "#syainBirth" ).val().isDate()) ) {
			alert("日付が正しくありません");
			$( "#syainBirth" )
			.select()
			.focus();
			event.preventDefault();
			return;
		}


		if ( $(this).data("button_target") == "更新" ) {

			if ( !confirm("更新してよろしいですか?") ) {
				event.preventDefault();
				return;
			}

		}
	});

	// ***********************************************
	// datepicker プラグイン
	// ***********************************************
	$("#syainBirth").datepicker(datepicker_option);

	// ***********************************************
	// 必須と初期フォーカス
	// ***********************************************
	$("#syainCode")
		// HTML5 属性
		.prop("required", true)
		.focus();


});

// ***********************************************
// 日付妥当性チェックを String オブジェクトに追加
// ***********************************************
String.prototype["isDate"] = function() {
	var str = this.valueOf();
	if ( str == "" ) {
		return true;
	}
	if ( !str.match(/^\d{4}\/[\d]+\/[\d]+$/) ) { 
		return false; 
	} 
	var parts = str.split( "/" );
	var nYear = Number(parts[0]); 
	var nMonth = Number(parts[1]) - 1;
	var nDay = Number(parts[2]);
	// 月,日の妥当性チェック 
	if ( 0 <= nMonth && nMonth <= 11 && 1 <= nDay && nDay <= 31 ) { 
		var dt = new Date(nYear, nMonth, nDay); 
		if( isNaN(dt) ) { 
			return false; 
		}
		else if(
			dt.getFullYear() == nYear &&
			dt.getMonth() == nMonth &&
			dt.getDate() == nDay ) {
			return true;
		}
		else{ 
			return false;
		}
	}
	else{ 
		return false;
	}
};


</script>

<form method="get"
	id="target_form"
	target="my_ferame"
	action="http://winofsql.jp/php_get.php"
	accept-charset="utf-8">
	<input type="submit"
		name="send"
		id="send_check"
		value="送信" >
	<table id="main">
		<tr>
			<td class="ttl">社員コード
			</td>
			<td>
				<input type="text"
					name="syainCode"
					id="syainCode"
					value=""
					maxlength="4"
					style="">
			</td>
		</tr>
		<tr>
			<td class="ttl">氏名
			</td>
			<td>
				<input class="pass2"
					type="text"
					name="syainName"
					id="syainName"
					value=""
					maxlength="50"
					style="">
			</td>
		</tr>
		<tr>
			<td class="ttl">性別
			</td>
			<td>
				<select class="pass2"
					name="syainSex"
					style="width:100px;">
					<option value='0' >男性
					</option>
					<option value='1' >女性
					</option>
				</select>
			</td>
		</tr>
		<tr>
			<td class="ttl">生年月日
			</td>
			<td>
				<input class="pass2"
					type="text"
					name="syainBirth"
					id="syainBirth"
					value=""
					pattern="^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2}$"
					maxlength="10"
					style="">
			</td>
		</tr>
		<tr>
			<td class="ttl">給与
			</td>
			<td>
				<input class="pass2"
					type="text"
					name="syainKyuyo"
					id="syainKyuyo"
					value=""
					pattern="^[0-9]+$"
					maxlength="7"
					style="">
			</td>
		</tr>
	</table>
	<input type="submit"
		name="send"
		id="send_update"
		value="更新">
	<input type="button"
		name="cancel"
		id="button_cancel"
		value="キャンセル">
</form>
<iframe name="my_ferame"
	frameborder="1"
	scrolling="yes"
	width="400"
	height="200" >
</iframe>


posted by lightbox at 2014-10-24 12:26 | jQuery | このブログの読者になる | 更新情報をチェックする

2014年10月23日


ノーマル JavaScript と比較。jQuery でクリックしたテキスト( SPAN 要素 と INPUT またはテキストエリア ) を選択状態にする

クリックした後、右クリックまたは CTRL+C でそのテキストをクリップボードにコピーする事を想定しています。

jQuery での実装

最新のブラウザならば、SPAN 部分は皆『document.createRange()』で作成されたオブジェクトで正しく動作します。但し、INPUT 等の入力可能な部分での処理は、エレメント(要素)の、setSelectionRange メソッドで対応します。その際、IE8 以前では、createTextRange で処理を行わないと動作しません( ここはいずれ必要なくなる処理です )

これらの処理は、サンプルでは文字列全体の選択を行っていますが、いずれも任意の範囲指定が可能です。

JavaScript のみでの実装

それに対して、JavaScript のみで記述したものは、入力部分を全て選択する場合は要素に直接イベントとして this.select() を実行されるのが簡単です。SPAN では、jQiery と同様に処理しています。

jQuery でのイベント登録

jQuery のセレクタによるオブジェクト複数選択より、each メソッドで全ての要素に click イベントを登録できるので効率的です。
▼ JavaScript のみ : クリックして下さい

あいうえお
abc-001
日本語 表示



▼ jQuery : クリックして下さい

あいうえお
abc-001
日本語 表示



<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<script type="text/javascript">
// ***************************
// 一般的な関数定義
// ***************************
function textSelect(obj) {
	var range,sel;
	if (window.getSelection) {
		range = document.createRange();
		range.setStart(obj.firstChild,0);
		range.setEnd(obj.firstChild,obj.firstChild.nodeValue.length);
		sel = getSelection();
		sel.removeAllRanges();
		sel.addRange(range);
	}
}

// ***************************
// jQuery の初期処理
// ***************************
$(function(){
	$(".selection").each(function(){
		$(this).click(function(){
			var tagName = this.tagName.toLowerCase();
			switch( tagName ) {
				case 'textarea':
				case 'input':
					if (this.setSelectionRange) { 
						this.setSelectionRange(0,$(this).val().length);
					}
					// 古いIE(8以前)用
					else if (this.createTextRange) {
						var range = this.createTextRange();
						range.collapse(true);
						range.moveStart('character', 0);
						range.moveEnd('character', $(this).val().length);
						range.select();
					}
					break;
				default:
					if (window.getSelection) {
						var range = document.createRange();
						range.setStart(this.firstChild,0);
						range.setEnd(this.firstChild,$(this).text().length);
						sel = getSelection();
						sel.removeAllRanges();
						sel.addRange(range);
					}
			}
		});
	})
});
</script>
<pre class="w6">
<b class=sttl>▼ JavaScript のみ</b>

<span onclick='textSelect(this)'>あいうえお</span>
<span onclick='textSelect(this)'>abc-001</span>
<span onclick='textSelect(this)'>日本語 表示</span>
<input onclick='this.select()' value="日本語 表示">
<textarea onclick='this.select()'>日本語 表示</textarea>

<b class="sttl">▼ jquery.selection</b>

<span class="selection">あいうえお</span>
<span class="selection">abc-001</span>
<span class="selection">日本語 表示</span>
<input class="selection" value="日本語 表示">
<textarea class="selection">日本語 表示</textarea>




</pre>
関連する記事

jQuery.selection(プラグイン) : テキストエリア内のカーソル位置や選択範囲に対して文字列を追加したり置き換えたりする。


posted by lightbox at 2014-10-23 14:14 | jQuery | このブログの読者になる | 更新情報をチェックする

2014年10月03日


jQuery のオブジェクト参照と属性参照と DOM としての参照

jQuery で属性参照するのであれば、prop が望ましいです。そして、jQuery から DOM 参照したほうが簡単な場合もあります。

ソースコード実行する場合は、開発者ツールを開いて実行します。(IEは IE9以降 でないと、console.dir() は動作しません)

jQuery のオブジェクトと通常のオブジェクトを意図的に使い分けています。
▼ jQuery
jQuery では、$("セレクタ") から jQuery のメソッドを使う

▼ DOM を使いたい場合
$("セレクタ")[n] から、DOM のメソッドやプロパティを使用します
( $("セレクタ").get(n) でも同等 )
属性を設定・取得するメソッドとしては、.attr() と .prop() の二通りありますが、結果としての大きな違いはサンプルコードのような状態の違いを検査する時の表現になります。しかし、厳密な違いは結構大きいので、UI でのコントロールでは prop を使う事を強く推奨します。 ※ attr に関しては、バージョンの 1.6 を境に微妙に動作が違う
elem.checked true (Boolean) が設定されていても、チェックを外せば false となる
$(elem).prop("checked") true (Boolean) が設定されていても、チェックを外せば false となる
elem.getAttribute("checked") checked="checked" と指定した場合、Firefox では getAttribute で
変化は評価できませんでした。IE は常に true か false が返される
ようです。
$(elem).attr("checked")
(1.6)
getAttribute の仕様と同じ状態
( チェックを外しても初期状態のまま )
$(elem).attr("checked")
(1.6.1以降)
"checked" (String) と、undefined で切り替わる
( 最新仕様 )
$(elem).attr("checked")
(1.6より前)
elem.checked と同じ動作

▼ デベロッパーツールのコンソールを開いて右のボタンをクリックしてソースコードの結果を表示できます


▼ このコードをソースコードから実行してみる
<input id="bt1" type="button" value="実行" disabled />
<input id="bt2" type="button" value="実行" />
<script type="text/javascript" src="jquery-1.6.2.min.js"></script> 
<script type="text/javascript">

$("#bt2").click( function() {

	// 既存のプロパティの参照
	var x = $(navigator).attr('userAgent');
	console.log(x);
	x = $(navigator).prop('userAgent');
	console.log(x);

	// グローバルスコープにユーザプロパティ(変数)を作成
	window["lightbox"] = { "version": 1.01, "type": "user" };

	// jQueryでセット
	$(window).attr("lightbox1", {} );
	$(lightbox1).attr("version", 1.01).attr( "type", "user" );
	$(window).prop("lightbox2", {} );
	$(lightbox2).prop("version", 1.01).prop( "type", "user" );

	// 内容の表示
	try {
		console.dir(lightbox);
		console.dir(lightbox1);
		console.dir(lightbox2);
	} catch(e){};

	// bt1 と bt2 の disabled 属性の見え方の違い
	// this は、bt2 のイベント内なので、bt2 のオブジェクト
	// attr では、prop の true/false に対して、"disabled"/undefined
	console.log( "左ボタン(attr):" + $("#bt1").attr("disabled") );
	console.log( "左ボタン(prop):" + $("#bt1").prop("disabled") );
	console.log( "右ボタン(attr):" + $(this).attr("disabled") );
	console.log( "右ボタン(prop):" + $(this).prop("disabled") );

	// タイトル属性の追加( 実行後、
	$("#bt1").attr("title", "OK");
	$("#bt2").prop("title", "NO");

	// 配列で直接オブジェクトを参照
	console.log( "左ボタン([n] DOM):" + $("#bt1")[0].disabled );
	console.log( "右ボタン([n] DOM):" + $("#bt2")[0].disabled );

	// 上と同じものをメソッドで
	console.log( "左ボタン(get(n) DOM):" + $("#bt1").get(0).disabled );
	console.log( "右ボタン(get(n) DOM):" + $("#bt2").get(0).disabled );

	// jQuery の each で参照( ひとつしか無いという前提 )
	$("#bt1").each( function(){ console.log("左ボタン(DOM):" + this.disabled); } )
	$("#bt2").each( function(){ console.log("右ボタン(DOM):" + this.disabled); } )
	$("#bt1").each( function(){ console.log("左ボタン(jQuery):" + $(this).prop("disabled")); } )
	$("#bt2").each( function(){ console.log("右ボタン(jQuery):" + $(this).prop("disabled")); } )

	// 通常(DOM)の参照
	console.log( document.getElementById("bt1").disabled );
	console.log( document.getElementById("bt2").disabled );

});

</script>
グローバルオブジェクトの作成

window["lightbox"] = { "version": 1.01, "type": "user" }; は、window.lightbox を作成(オブジェクトです)し、version と type プロパティをセットしています。

これと同等の処理を jQuery でも実行しています。

attr と prop での参照

左のボタンは、HTML として disabled が存在し、右のボタンには定義そのものがありません。ですから、attr で参照すると、右のボタンは undefined になります。

attr と prop は、画面の操作による変化がなければ、どちらを使っても意味としては同じ結果になります。(返される値は違います)

DOM として参照

jQuery の セレクタで選択したオブジェクトは、配列参照する事で DOM として使用できます。(正式なメソッドは get です)
※ 但し、get を使うと -1 という負の数を使って、一覧の最後のオブジェクトを参照可能です

また、each では コールバックを必要としており、その関数には DOM が渡されています。あらためて jQuery を使用する場合は、$(this) とします。



タグ:jquery
posted by lightbox at 2014-10-03 13:31 | jQuery | このブログの読者になる | 更新情報をチェックする

2014年07月11日


jQuery/JavaScript : 画像を最初から最大表示する為の window.open

大きい画像は、一般的なツールで表示しようとすると適当な大きさに縮小して表示したりしますが、縦の画像の場合はディスプレイの向きと合わずにあまり大きく表示されなかったりします。ですが、最初から鮮明な画像を参照目的で表示したい場合もあるので、window.open で目的のサイズを作成して、そこへ img 要素を書き込んで表示します
 

<script type="text/javascript">
$(function(){

	$("#image_open")
		.attr("type", "button")
		.val("画像を最初から最大表示")
		.click(function(){
			var w=1000,h=860;

			var hwin=window.open(
				"about:blank",
				"",
				// ウインドウの状態を設定
				"width="+w+
				",height="+h+
				",resizable=1,scrollbars=1"+
				",left="+(screen.width-w)/2+
				",top="+(screen.height-(h+100))/2);

			// ウインドウに書き込み
			hwin.document.write("<img src=\""+$(this).data("url")+"\">");
		});

});

</script>

<input id="image_open" data-url="https://lh4.googleusercontent.com/-Mq-8YkdWapM/U78yGav_zNI/AAAAAAAAVOg/ThULLTH3h0E/s1200/1405013162220598.jpg"> 


posted by lightbox at 2014-07-11 14:04 | jQuery | このブログの読者になる | 更新情報をチェックする

2014年07月02日


jQuery でボタンを作成して、this でボタンのカスタム属性を参照する方法のバリエーション

DOM でなにもかも実装しようとすると、とても時間コストがかかりすぎます。jQuery を使用すると、それを大幅に削減できますが、だからと言って DOM の仕様を無視する、または覚えないのは問題があります。

全て jQuery で書いたほうが説明は簡単ですが、少なくとも data-* 属性ではどちらも理解して使えるようにしておいたほうがいいと思います。
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script type="text/javascript">

$(function(){

	// ボタン
	$("#button_control")
		.attr({
			"type": "button",
			"data-my-data": "カスタム属性"
		})
		.val("ボタン")
		.css({
			"font-size": "20px",
			"background-color": "orange",
			"font-weight": "bold",
			"border-radius": "10px"
		})
		.click(function(){
			console.log("ボタンがクリックされました");

			// 以下の4つは全て my_button を表示します
			console.log( this.name );
			console.log( $(this)[0].name );
			console.log( $(this).prop("name") );
			console.log( $(this).attr("name") );

			// 以下の4つは全て カスタム属性 を表示します
			console.log( $(this).data("my-data") );
			console.log( $(this).attr("data-my-data") );
			console.log( this.dataset.myData );
			console.log( $(this)[0].dataset.myData );

			// 以下の4つは全て 新しい属性 を表示します
			console.log( $(this).data("your-data") );
			console.log( $(this).attr("data-your-data") );
			console.log( this.dataset.yourData );
			console.log( $(this)[0].dataset.yourData );
		});

});

</script>

<input
	id="button_control"
	name="my_button"
	data-your-data="新しい属性">
click イベントの中で参照される this は DOM です。


posted by lightbox at 2014-07-02 23:50 | jQuery | このブログの読者になる | 更新情報をチェックする

2014年06月27日


jQuery/JavaScript : 暗転ボタン

WEB ページ全体を暗い DIV で覆って操作できないようにして、その上に DIV を乗せてコンテンツを表示します。確実に DIV でページを覆うために、サイズは2倍にしていますが、iPhone 等のスマホで向きを変える場合など、イベント対応しない場合に有効です。

※ 暗転後のコンテンツの位置は、暗転を行うコントロールを基準に表示するようにしています。

IE 用の処理の中で、jQuery を使っていない部分がありますが、元々 DOM でテスト済みなのを jQuery でテストする意味もあまりなかった(古いIE用なので)のでそのままにしています。

<script>
if ( !window.jQuery ) {
	if ( typeof window[window.location.hostname+'.loadjQuery'] === 'undefined' ) {
		if ( window.addEventListener ) {
			window[window.location.hostname+'.loadjQuery'] = '//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js';
		}
		else {
			window[window.location.hostname+'.loadjQuery'] = '//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js';
		}
	}
	document.write("<"+"script src=\"" + window[window.location.hostname+'.loadjQuery'] + "\"></"+"script>");
}
</script>
<script>
// *********************************************************
// 暗転時に操作するウインドウの作成
// *********************************************************
$(function(){

	$("#win_base")
		.hide()
		.css({
			position: "absolute",
			color: "#000000",
			backgroundColor: "#E0E0E0",
			borderStyle: "solid",
			borderColor: "#303030",
			borderWidth: "1px",
			width: "0px",
			height: "0px",
			borderRadius: "6px",
			zIndex: 0x7fffffff
		});


	$("#win_base input")
		.attr("type", "image")
		.prop("src", "http://winofsql.jp/image/mcancel.png")
		.css("float", "right")
		.click(function(){
			$(this.parentNode).hide();
			$(window["dark_modal"]).remove();
		});
});

// *********************************************************
// 暗転時に操作するウインドウを target 基準の指定位置に表示
// *********************************************************
function setDark(target,x,y,w,h) {

	setDarkModal();

	var numY = target.offsetTop;
	var numX = target.offsetLeft;
	var obj = target;
	while( obj = obj.offsetParent ) {
		numY += obj.offsetTop;
		numX += obj.offsetLeft;
		if ( obj.tagName.toUpperCase() == 'BODY' ) {
			break;
		}
	}
	$("#win_base").css( "top", (numY+y) + "px" );
	$("#win_base").css( "left", (numX+x) + "px" );
	$("#win_base").css( "width", w + "px" );
	$("#win_base").css( "height", h + "px" );
	$("#win_base").show();
}

// *********************************************************
// 暗転用の DIV を作成
// *********************************************************
function setDarkModal(){
	var dark_modal = document.createElement('div');
	$(dark_modal)
		.attr('id','dark_modal')
		.css( {
			position: "absolute",
			width: Math.max(document.documentElement.scrollWidth,document.body.scrollWidth)*2+'px',
			height: Math.max(document.documentElement.scrollHeight,document.body.scrollHeight)*2+'px',
			left: "0px",
			top:  "0px"
		});
	var userAgent = window.navigator.userAgent.toLowerCase();
	if (userAgent.indexOf("msie") > -1) {
		$(dark_modal).hide();
		var appVersion = window.navigator.appVersion.toLowerCase();
		if (appVersion.indexOf("msie 10.0") > -1) {
			$(dark_modal).css({
				backgroundColor: "#000000",
				opacity: 0.5
			});
		}
		else {
			dark_modal.style.backgroundColor = '#000000';
			dark_modal.style.filter='alpha(opacity=50)';
		}
	}
	else {
		$(dark_modal).css({
			backgroundColor: "#000000",
			opacity: 0.5
		});
	}

	$("body").append(dark_modal);
	if (userAgent.indexOf("msie") > -1) {
		dark_modal.style.display = '';
	}

	window["dark_modal"] = dark_modal;
}
</script>

<input type="button" value="暗転ボタン" onclick='setDark(this,100,0,200,50);'>

<div id="win_base" style='display:none'><input>
<div id=win_box style='padding:2px;'>ここにコンテンツ</div>
</div>
関連する記事

JavaScript : zIndex の最大値と思われる 0x7FFFFFFF を各ブラウザでテストしました
JavaScript : クリックした要素の位置を計算して、近くにウインドウを開く
JavaScript : ブラウザの表示を半透明で暗くする方法( scrollHeight で高さ決定 )



タグ:jquery javascript
posted by lightbox at 2014-06-27 10:19 | jQuery | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり