2016年07月05日


jQuery で推奨される画面ロードイベントの記述

jQuery 3.0 アップグレードガイドで書かれている、document-ready は jQuery 3.0では1つ目を推奨として以下が書かれています。

$(fn);

要はこういう事です。
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<script>
$(function(){
	$("#btn")
		.on("click", function(){
			alert("ボタンがクリックされました");
		});
});
</script>

<input
	type="button"
	id="btn"
	value="実行">



posted by at 01:41 | Comment(0) | jQuery | このブログの読者になる | 更新情報をチェックする


2014年12月27日


JavaScript : ページ内のテーブルのボーダー(枠線)を設定する

getElementsByTagName は全てのノードで使用できるので、順番に子孫を取得する事ができます。

<script type="text/javascript">

function scriptTest(evt) {

	// TABLE 要素のコレクション
	var obj = document.getElementsByTagName("TABLE");
	var objcol = null;

	// TABLE 一覧
	for( var i = 0; i < obj.length; i++ ) {

		// テーブル外側の枠線
		obj[i].style.borderStyle = 'solid';
		obj[i].style.borderColor = '#411DB8';
		obj[i].style.borderWidth = '1px';

		// テーブル内の TD の一覧
		objcol = obj[i].getElementsByTagName("TD");
		for( var j = 0; j < objcol.length; j++ ) {
			// テーブル内の TD の枠線
			objcol[j].style.borderStyle = 'solid';
			objcol[j].style.borderColor = '#ffa500';
			objcol[j].style.borderWidth = '1px';
		}

		// テーブル内の TH の一覧
		objcol = obj[i].getElementsByTagName("TH");
		for( var j = 0; j < objcol.length; j++ ) {
			// テーブル内の TH の枠線
			objcol[j].style.borderStyle = 'solid';
			objcol[j].style.borderColor = '#1C8A23';
			objcol[j].style.borderWidth = '1px';
		}
	}

}
</script>
<input type="button" value="実行" onclick='scriptTest(event);'>



posted by at 00:14 | Comment(0) | JavaScript | このブログの読者になる | 更新情報をチェックする


2014年12月26日


JavaScript : ページの最後へ移動するボタン

今時のブラウザならどれでもうまく行くと思いますが一応 Math.max で最大を取っています

1) document.getElementsByTagName("HTML")[0].scrollHeight
2) document.documentElement.scrollHeight
3) document.body.scrollHeight

<input
	type="button"
	value="ページの最後"
	onclick='scroll(
		0,
		Math.max(document.getElementsByTagName("HTML")[0].scrollHeight,document.documentElement.scrollHeight,document.body.scrollHeight)
		);
	'
>



posted by at 23:20 | Comment(0) | JavaScript : 重要(基本) | このブログの読者になる | 更新情報をチェックする


2014年11月28日


set_include_path と PATH_SEPARATOR

PHP マニュアル : set_include_path

このマニュアルページ内に『PATH_SEPARATOR 定数を利用することで、 オペレーティングシステムに依存せずに include path を追加することが可能です。』とあります。

set_include_path は重要ですが、オンラインと Windows で環境切り替えでは、この事がとても重要になります。
<?php
$path = '/usr/lib/pear';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
?>
同様に、DIRECTORY_SEPARATOR を使って、\ と / の違いも吸収する事も可能ですが、/ で書いておけば Windows でも動作すると思います。


posted by at 00:54 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする


2014年07月10日


PHP の Parse error

PHP を始めると良く遭遇するエラーですが、たいていが行末の ; (セミコロン)の記述のし忘れです。ですが、PHP が表示してくれる行番号は、その行の次の行になります

以下のコードは、6行目がエラーとなります。
<?php

foreach( $_SERVER as $member ) {

	print $member
	print "OK";

}

?>


Parse error: syntax error, unexpected 'print' (T_PRINT) in C:\laylaClass\WinOfSql102\Action.php on line 6
タグ:PHP
posted by at 01:14 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする



PHP : 条件つきで定義される関数

PHP では、関数は参照される前に定義されている必要はありません。 ただし条件付きで関数が 定義されるような場合を除きます
以下が簡単な例です。ボタンで送信した場合はエラーになります Fatal error: Call to undefined function plus() in C:\httpd142p\kikin\func_01.php on line 12
<?php
// 条件つきの関数

if ( $_GET['send'] == '' ) {
	function plus( $a, $b ) {
	
		return $a + $b;
	
	}
}

print plus(10,5);

?>
<form
	name="frm"
	action="<?= $_SERVER['SCRIPT_NAME'] ?>"
	target="_self"
	method="get"
	onsubmit='return (function(){return true;})();'
>
<input type="submit" name="send" value="送信">
</form>





タグ:PHP 変数
posted by at 01:04 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする



PHP : 関数の中の関数

関数の中に関数が定義できて、どのような関数もグローバルスコープでどこからでも呼び出す事ができます。と、マニュアルには書かれていますが、

つまり、

「必要な時に関数のロードをする」為にラップする関数をローダーとして使えますよ、という事だと思います。
<?php
// ********************
// 計算関数のロード
// ********************
function load_compute( ) {

	function plus( $a, $b ) {
		return $a + $b;
	}

	function minus( $a, $b ) {
		return $a - $b;
	}

}

// ここで実行すると未定義エラー
if ( !function_exists( "plus" ) ) {
	print "未定義です<br>";
}

load_compute();
print plus(10,5) . "<br>";

// ここで実行すると定義あり
if ( function_exists( "plus" ) ) {
	print "定義されています<br>";
}


?>


タグ:PHP 関数
posted by at 00:56 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする



PHP : 関数への参照渡しと global キーワードでの変数宣言( または$GLOBALS の利用 )

PHP では関数の引数は「値渡し」なので、関数内の引数の変数はコピーされたもので、その内容を変更しても外の変数の内容が変更される事はありません。また、仮に外と同じ名前の変数を関数内部で参照しても、それはローカルのみ有効な別の変数となります。

そこで、PHP では外部の変数を直接参照する方法として参照渡しと global キーワードによる外部の変数の参照方法という手段があります。

※ ▼ PHP ドキュメントに以下のような記述があります
例2 globalのかわりに$GLOBALSを使用する
<?php
// ************************
// 定義で参照渡し
// ************************
function plus( &$a, $b ) {

	$a += $b;
}

$x = 10;
plus($x,5);

print $x;
print "<hr>";

// ************************
// global キーワード
// ************************
function plus3() {

	global $z;

	$z[0] += $z[1];
}

$z = array(10,5);
plus3();

print_r( $z );
print "<hr>";

// ************************
// $GLOBALS(スーパーグローバル)
// ************************
function plus4() {

	global $z;

	$GLOBALS['z'][0] += $GLOBALS['z'][1];
}

$z = array(10,5);
plus4();

print_r( $z );
print "<hr>";


?>




タグ:PHP 変数
posted by at 00:41 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする



PHP : プログラムの要素とブロックに対する処理

{ } はブロックです。ブロックの中には処理が記述されます。処理記述には2種類あって、; で終了する「文」と { } で表現されるブロックに分かれるのですが、{ } にもいくつか種類があって、以下のような形式になっています。

命令 ( 命令の属性 ) {
	命令に所属する処理記述
}

但し、PHP のドキュメントにそのような明確な記述があるのでは無く、C 言語と同等の機能という事で推測した経験則です。ドキュメントは、{} を中括弧と呼んで、『文は、中括弧によるグループ文で カプセル化することによりグループ化することが可能です。 グループ文は、同時に文にもなります』とあります
例えば以下のようなものです。
// ************************************************
// if ( オプションとして else )
// ************************************************
if ( 条件 ) {
	条件が true である場合の処理記述
}

// ************************************************
// for ( 指定回数繰り返し )
// ************************************************
for (initialization; 条件; increment) {
	条件 が true である間繰り返される処理記述
}

// ************************************************
// while ( 条件繰り返し )
// ************************************************
while (条件) {
	条件 が true である間繰り返される処理記述
}

// ************************************************
// function ( 関数定義 )
// ************************************************
function 名前( 仮引数 ) {
	名前で呼ばれた時に実行される処理記述
}

// ************************************************
// try ( エラー処理 )
// ************************************************
try {
	監視対象の処理記述
}
catch( エラーの値 ) {
	監視対象の処理記述がエラー時に実行する処理記述
}

; で終わる文は、殆どが他で定義された関数名の呼び出しかまたは、代入文による変数の入れ替えになります。


タグ:PHP
posted by at 00:26 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする


2014年07月09日


PHP : 関数名の規則

PHP のマニュアルには、
関数名は、PHP の他のラベルと同じ規則に従います。関数名として有効な 形式は、まず文字かアンダースコアで始まり、その後に任意の数の文字・ 数字・あるいはアンダースコアが続くものです。正規表現で表すと、

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

となります。 
とあります。 ですから、こんな関数が SHIFT_JIS で書く時は可能になるはずですが・・・
<?php
// [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 

function シフトジスノカタカナ( $a, $b ) {

	return $a + $b;

}

print シフトジスノカタカナ(10,5);

?>


たしかに動きました。

また、「関数名は大文字小文字を区別しません」との事です
<?
// 関数名は大文字小文字を区別しない

function PLUS( $a, $b ) {

	return $a + $b;

}

print plus(10,5);

?>




0 1 2 3 4 5 6 7 8 9 A B C D E F
0 \0 0 @ P ` p
1 ! 1 A Q a q
2 " 2 B R b r
3 # 3 C S c s
4 $ 4 D T d t
5 % 5 E U e u
6 & 6 F V f v
7 \a ' 7 G W g w
8 \b ( 8 H X h x
9 \t ) 9 I Y i y
A \n * : J Z j z
B \v ESC + ; K [ k {
C \f , < L \ l |
D \r - = M ] m }
E SO . > N ^ n ~
F SI / ? O _ o ソ


タグ:PHP 関数
posted by at 20:06 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする



PHP と JavaScript の関数の引数の後から処理( 可変長引数リスト )

難しく言うと、「可変長引数リスト」の処理方法ですが、引数を定義されている関数に対しても使えるので、いずれも function のオプション機能を内部で使っていると考えたほうが自然です。

PHP : func_get_args
JavaScript : arguments プロパティ
<?php
// 引数の後から処理

function plus() {

	$args = func_get_args();

	$args[0] += $args[1];

	print $args[0];

}

$a = 10;

plus($a, 5);

?>
<!-- JavaScript -->
<script type="text/javascript">
function plus() {

	arguments[0] += arguments[1];

	alert(arguments[0]);

}

var a = 10;
plus(a, 5);

</script>



posted by at 20:05 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする


2011年02月03日


showModalDialog の使い方と使う場所

昨今の事情では、jQuery UI のモーダルダイアログを使用するほうがよさそうです。

WEB では一般のテキストエリア毎に機能を持たすより、拡張入力としてテキストエリアを入力する為だけのダイアログを表示させるといいと思います。

※ 単純にページを用意する場合は同一ドメインである必要があります
※ Opera では、showModalDialog を使う事はできません
※ Chrome 36では、window.showModalDialogが削除されるようです

テストページ

http://toolbox.winofsql.jp/sample/callModalDialog.htm

このテストページでは、「参照」ボタンにより現在の内容がダイアログに転送されて、テキストエリア入力が可能になり、ダイアログ側で変更した後に、「OK」ボタンで元のテキストエリアに変更したデータが転送されます。

このダイアログ内では、テキストエリア内で TAB キーが有効で、選択した状態で TAB キーを使うと一括で全ての行に TAB を挿入します。
( SHIFT+TAB で TAB を削除 )

呼び出す側のページ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta content="text/html; charset=shift_jis" http-equiv="Content-Type">
<title>モーダルダイアログの呼び出し</title>
<style type=text/css>
* {
	font-size: 12px;
}

textarea {
	width:600px;
	height:200px;
}
</style>
<script type=text/javascript>
// *********************************************************
// 参照用ダイアログを開く
// 
// path へ引き渡す値として、
// 1) win	: このウインドウオブジェクト
// 2) target	: 値を戻してほしい id の文字列
// 3) val	: その id にセットされている現在の値
// *********************************************************
function openModalDialog(path,id) {

	var win_param = "";

	win_param += "dialogHeight:450px;";
	win_param += "dialogWidth:720px;";
	win_param += "dialogLeft:200px;";
	win_param += "dialogTop:200px;";

	window.showModalDialog(
		path,
		{ win: window,target: id, val: document.getElementById(id).value },
		win_param
	);
}

</script>
</head>
<body>
<input type="button" value="参照" onclick='openModalDialog("modalDialog.htm", "text")'>
<br>
<textarea id="text">
function dialog_opener_access() {
	try {
		// 処理
		var win = window.dialogArguments.win;
		var target = window.dialogArguments.target;

		win.document.getElementById(target).value =
			document.getElementById("text").value
		window.close();
	}
	catch(e) {
		alert("このページはモーダルダイアログ用です。");
	}
}
</textarea>

<br><br><br>
※ Opera は showModalDialog が使えません
</body>
</html>


呼び出す場合に注意するのは第二引数で、JavaScript のオブシェクトが渡せます。つまり、{} による JSON データを引き渡す事ができるので自由に多くのやり取りが可能になります。

呼び出される側のページ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta content="text/html; charset=shift_jis" http-equiv="Content-Type">
<title>モーダルダイアログ</title>
<style type=text/css>
* {
	font-size: 12px;
}

textarea {
	width:700px;
	height:400px;
}
</style>
<script	type="text/javascript" src="http://lightbox.on.coocan.jp/tabtextarea.js"></script>
<script type=text/javascript>
function dialog_opener_access() {
	try {
		// 処理
		var win = window.dialogArguments.win;
		var target = window.dialogArguments.target;

		win.document.getElementById(target).value = document.getElementById("text").value
		window.close();
	}
	catch(e) {
		alert("このページはモーダルダイアログ用です。");
	}
}
</script>
</head>
<body>
<input type="button" value="OK" onclick='dialog_opener_access()'>
<br>
<script type="text/javascript">
createTabTextArea("text",100,12,"toolbox","width:700px;font-size:13px;","title=\"タブキーが有効です\"");
</script>

<script type=text/javascript>
(function () {
	try {
		var win = window.dialogArguments.win;
		var target = window.dialogArguments.target;

		document.getElementById("text").value = window.dialogArguments.val;
	}
	catch(e) {
		alert("このページはモーダルダイアログ用です。");
	}
})();
</script>

</body>
</html>

関連する記事

クロスドメインで、showModalDialog を使用する


posted by at 12:10 | Comment(0) | ちょっと特別な JavaScript | このブログの読者になる | 更新情報をチェックする


2010年11月24日


JavaScript : 無名関数を使用してグローバル領域を汚さない

JavaScript で関数の外で変数を定義してしまうと、グローバル領域を使用
してしまうので、他で使用しているかどうか考慮する必要がありますが、無名
関数を使用すると、そこに一時的なローカルブロックを作成できるので便利です
<!-- JavaScript -->
<script type="text/javascript" src="http://www.google.com/jsapi" charset="utf-8"></script>
<script type="text/javascript">
google.load("prototype", "1.6.1.0");
</script>

<textarea id="result" cols="80" rows=10></textarea>

<script type="text/javascript">
function syain(a,b,c) {

	this.code = a;
	this.name = b;
	this.age = c;
}

var p = Array();

p[0] = new syain("0001","田中", 20 );
p[1] = new syain("0002","鈴木", 21 );
p[2] = new syain("0003","山田", 22 );
p[3] = new syain("0004","中村", 23 );

(function() {
	var work = "";

	for( i = 0; i < p.length; i++ ) {
		work += ( p[i].code + "\t" + p[i].name + "\t" + p[i].age + "\n" );
	}

	$("result").value = work;
})();

try {
	alert(work);
}
catch(e){
	alert(e.message);
}

</script>



posted by at 13:44 | Comment(0) | ちょっと特別な JavaScript | このブログの読者になる | 更新情報をチェックする



JavaScript : Function を同じ種類の入れ物にする

要するに、「オブジェクト」として新たなデータ型を作りたい場合の方法です。
オブジェクトとしては、メソッドも追加できますが、単に「入れ物」で利用する
ところから始めると良いと思います
<script type="text/javascript" src="http://www.google.com/jsapi" charset="utf-8"></script>
<script type="text/javascript">
google.load("prototype", "1.6.1.0");
</script>

<script type="text/javascript">
function syain(a,b,c) {

	this.code = a;
	this.name = b;
	this.age = c;
}

var p = Array();

p[0] = new syain("0001","田中", 20 );
p[1] = new syain("0002","鈴木", 21 );
p[2] = new syain("0003","山田", 22 );
p[3] = new syain("0004","中村", 23 );


function test() {

	var work = "";

	for( i = 0; i < p.length; i++ ) {
		work += ( p[i].code + "\t" + p[i].name + "\t" + p[i].age + "\n" );
	}

	$("result").value = work;
}

</script>
<!-- JavaScript 起動用ボタン -->
<pre>
<input type="button" id="btn" value="実行" onclick='test();'>
<textarea id="result" cols="80" rows=10></textarea>
</pre>



posted by at 13:29 | Comment(0) | ちょっと特別な JavaScript | このブログの読者になる | 更新情報をチェックする


2010年11月08日


PHPを書く時に必要な部品( クリップボード用 )

HTML( 主にHEAD部 ) 系

	meta、css、javscript

HTML ( サーバー送信 ) 系

	form、input(text/checkbox/radio)、textarea

HTML ( JavaScript ) 系

	JavaScript 起動用ボタン、オブジェクト参照

HTML ( 一般 ) 系

	table、特殊文字

PHP ( 基本 ) 系

	header、require_once、関数定義、exit

PHP ( 制御構造 ) 系

	foreach、for、if

PHP ( 関数 ) 系

	キャラクタセット変換、ファイル一括入出力、文字列分解
	文字列置換、部分文字列、文字列検索

PHP ( 単純処理関数 ) 系


posted by at 00:35 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする


2010年10月11日


JavaScript : コンボボックスの選択状態を操作する

selectedIndex プロパティを使って行います。
通常、先頭の OPTION か、selected 属性を設定した OPTION が
選択されますが、-1 を設定すると未選択状態にする事ができます。
<SCRIPT type="text/javascript">
function selectOption() {

	var combo = document.frm.combo;
	combo.selectedIndex = 2;

}
function noSelectOption() {

	var combo = document.frm.combo;
	combo.selectedIndex = -1;

}
</SCRIPT>

<FORM name="frm">
<SELECT name="combo" style='width:150px;'>
<OPTION value="1">データ1</OPTION>
<OPTION value="2">データ2</OPTION>
<OPTION value="3">データ3</OPTION>
<OPTION value="4">データ4</OPTION>
</SELECT>
</FORM>

<INPUT type="button" value="リスト選択" onclick='selectOption();'>
<INPUT type="button" value="未選択" onclick='noSelectOption();'>


posted by at 21:40 | Comment(0) | JavaScript : 要素 | このブログの読者になる | 更新情報をチェックする



JavaScript : コンボボックスのテキスト部分を取得

テキストはそれ自体がノードなので、firstChild.nodeValue で取得します。
<SCRIPT type="text/javascript">
function checkOptionText() {

	var combo = document.frm.combo;
	var options = combo.getElementsByTagName("OPTION");
	var text = ""

	for( i = 0; i < options.length; i++ ) {
		text += options[i].firstChild.nodeValue + "\n";
	}

	alert(text);

}
</SCRIPT>

<FORM name="frm">
<SELECT name="combo" style='width:150px;'>
<OPTION value="1">データ1</OPTION>
<OPTION value="2">データ2</OPTION>
<OPTION value="3">データ3</OPTION>
<OPTION value="4">データ4</OPTION>
</SELECT>
</FORM>

<INPUT type="button" value="テキスト取得" onclick='checkOptionText();'>


posted by at 21:26 | Comment(0) | JavaScript : 要素 | このブログの読者になる | 更新情報をチェックする



JavaScript : コンボボックスにリストを挿入する(移動も可)

insertBefore で、目印となるオブジェクトの前に挿入します。
これは、コンボボックスだけでは無く、全ての要素で実行できるので、
一番に最後に追加する appendChild では困る時に使います。
<SCRIPT type="text/javascript">
function insertOption() {

	var combo = document.frm.combo;
	var options = combo.getElementsByTagName("OPTION");
	var target = document.createElement("OPTION");
	target.setAttribute("value", "1.5");
	var text = document.createTextNode("データ1.5")
	target.appendChild(text);
	combo.insertBefore(target,options[1]);
}
</SCRIPT>

<FORM name="frm">
<SELECT name="combo" style='width:150px;'>
<OPTION value="1">データ1</OPTION>
<OPTION value="2">データ2</OPTION>
<OPTION value="3">データ3</OPTION>
<OPTION value="4">データ4</OPTION>
</SELECT>
</FORM>

<INPUT type="button" value="リスト挿入" onclick='insertOption();'>
移動するには、そのオブジェクトを挿入するだけで、元あった場所からは消えます。
<SCRIPT type="text/javascript">
function moveOption() {

	var combo = document.frm.combo;
	var options = combo.getElementsByTagName("OPTION");
	combo.insertBefore(options[2],options[1]);

}
</SCRIPT>

<FORM name="frm">
<SELECT name="combo" style='width:150px;'>
<OPTION value="1">データ1</OPTION>
<OPTION value="2">データ2</OPTION>
<OPTION value="3">データ3</OPTION>
<OPTION value="4">データ4</OPTION>
</SELECT>
</FORM>

<INPUT type="button" value="リスト移動" onclick='moveOption();'>


posted by at 21:10 | Comment(0) | JavaScript : 要素 | このブログの読者になる | 更新情報をチェックする



簡単にページの右クリックをできなくする


<script type="text/javascript">
document.oncontextmenu = function(){ return false };
</script>


解除したい場合は、デベロッパーツールで document.oncontextmenu=null を実行します



posted by at 12:38 | Comment(0) | ちょっと特別な JavaScript | このブログの読者になる | 更新情報をチェックする



JavaScript : ページの中の全てを参照する

document オブジェクトに3つのメソッドが用意されています。
これらのメソッドでページ内のエレメント(要素)を直接参照する事ができます

getElementById

IE : http://msdn.microsoft.com/en-us/library/ms536437.aspx
mozilla : https://developer.mozilla.org/ja/DOM/document.getElementById

getElementsByName

IE : http://msdn.microsoft.com/en-us/library/ms536438.aspx
mozilla : https://developer.mozilla.org/ja/DOM/document.getElementsByName

getElementsByTagName

IE : http://msdn.microsoft.com/en-us/library/ms536439.aspx
mozilla : https://developer.mozilla.org/ja/DOM/document.getElementsByTagName

getElementsByTagName は、各要素にも存在するメソッドなので、TABLE 内の TD 要素のみを全て
取得して、ループで全TD 内のテキストを取得するというような事に使う事ができます
また、getElementsByTagName では、特定要素のかわりに "*" を使う事ができます
( 全ての要素です )
<script type="text/javascript">
for( i = 0; i < document.getElementsByTagName("*").length; i++ ) {
	console.log(document.getElementsByTagName("*")[i].tagName );
}
</script>

フォーム内の要素

フォームとフォーム内の入力用要素に name 属性が設定されていると、
document.フォーム名.入力要素名で参照する事ができます。
<form name=myForm>
<input type="text" name="myFld" value="日本語表示">
</form>
<script type="text/javascript">
alert(document.myForm.myFld.value);

alert(document["myForm"]["myFld"].value);
</script>

document.フォーム名.入力要素名 は、
document["フォーム名"]["入力要素名"] と書きかえる事もできます

特別な定義済の body 要素

document.body で、document.getElementsByTagName("BODY")[0] と
同じものを参照する事ができます。


parentNode メソッドで一つ上の要素を参照

HTML エレメントは、階層構造になっているので、自分自身を示す this から
一つ上の要素を介して、他の要素を参照する事も可能です。
<div>
<span>a</span>
<span onclick='this.parentNode.getElementsByTagName("SPAN")[0].style.color="#ff0000"'>b</span>
<span onclick='this.parentNode.getElementsByTagName("SPAN")[3].style.color="#0000ff"'>c</span>
<span>d</span>
</div>


posted by at 10:58 | Comment(0) | JavaScript | このブログの読者になる | 更新情報をチェックする


2010年10月08日


JavaScript : リロードボタンとリンクボタン

テストしてみてかなり不思議に思いました。ブラウザによってかなり動作が違います。
INPUT のボタンを A で挟んでいるだけですが、Google Chrome と Opera は、ボタン
をクリックするだけで、A の  href が開きます。Firefox は、何故か二つ開くので、
イベントをキャンセルして、window.open しています。

IE は、昔から click メソッドがあるので、A を呼び出しています。
<INPUT type="button" value="サーバーからリロード" onclick='location.reload(true);'>

<A href="http://winofsql.jp" target="_blank">
<INPUT
	type="button"
	value="ウインドウを開く"
	onClick='
		window.userAgent = navigator.userAgent.toLowerCase();
		if (userAgent.indexOf("msie") > -1) {
			this.parentNode.click();
		}
		if (userAgent.toLowerCase().indexOf("firefox") > -1) {
			event.preventDefault();
			window.open(this.parentNode.href,this.parentNode.target);
		}
		'
></A>



posted by at 13:36 | Comment(0) | JavaScript : 要素 | このブログの読者になる | 更新情報をチェックする



JavaScript : 任意の要素からの相対位置にウインドウを開く

<script type="text/javascript">

window._win = document.createElement('div');
_win.setAttribute('id','_win')
_win.style.position='absolute';
_win.style.width='0px';
_win.style.height='0px';
_win.style.left='0px';
_win.style.top='0px';
_win.style.color = '#000000';
_win.style.backgroundColor = '#E0E0E0';
_win.style.display = 'none';
_win.style.borderStyle = 'solid';
_win.style.borderColor = '#303030';
_win.style.borderWidth = '1px';
_win.style.display = 'none';

str="";
str+="<input \n";
str+="	type=\"image\" \n";
str+="	src=\"http://winofsql.jp/image/mcancel.png\" \n";
str+="	style='float:right' \n";
str+="	onClick='this.parentNode.style.display = \"none\";' \n";
str+="> \n";
str+=" ";
_win.innerHTML = str;

document.body.appendChild(_win);

function setWin(target,x,y,w,h) {
	var numY = target.offsetTop;
	var numX = target.offsetLeft;
	var obj = target;
	while( obj = obj.offsetParent ) {
		numY += obj.offsetTop;
		numX += obj.offsetLeft;
		if ( obj.tagName == 'BODY' ) {
			break;
		}
	}
	_win.style.top = (numY+y) + "px";
	_win.style.left = (numX+x) + "px";
	_win.style.width = w + "px";
	_win.style.height = h + "px";
	_win.style.display = "";
}
</script>
<input
	type="button"
	value="ウインドウを開く"
	onClick='setWin(this,0,this.offsetHeight+2,200,150)'
>


posted by at 12:27 | Comment(0) | ちょっと特別な JavaScript | このブログの読者になる | 更新情報をチェックする



JavaScript 用リンク(アンカー)とブラウザ判定 / ブックマークレット登録専用リンク

ステータスバーへの表示は本来必要は無いですが、利用可能なので使っています。
但し、Opera は 化けます。

href に、javascript: を使って JavaScript を記述すると、
ブックマークレット登録専用リンクとして利用する事ができます。
JavaScript 用アンカー
<A href="about:ステータスバー用文字列" onclick='aclick( event );'>JavaScript 用アンカー</A>
<script type="text/javascript">

function aclick( ev ) {

	// ユーザ用に window にブロパティを作成( userAgent )
	window.userAgent = navigator.userAgent.toLowerCase();

	if (userAgent.indexOf("msie") > -1) {
		// 本来の処理のキャンセル( URL への移動 )
		ev.returnValue = false;
		alert("IE:"+userAgent);
	}
	else if (userAgent.toLowerCase().indexOf("firefox") > -1) {
		// 本来の処理のキャンセル( URL への移動 )
		ev.preventDefault();
		alert("Firefox");
	}
	else if (userAgent.toLowerCase().indexOf("opera") > -1) {
		ev.preventDefault();
		alert("Opera");
	}
	else if (userAgent.toLowerCase().indexOf("chrome") > -1) {
		ev.preventDefault();
		alert("Google Chrome");
	}
	else if (userAgent.toLowerCase().indexOf("safari") > -1) {
		ev.preventDefault();
		alert("Safari");
	}
	else {
		ev.preventDefault();
		alert("Unknown");
	}
}
</script>



posted by at 10:23 | Comment(0) | ちょっと特別な JavaScript | このブログの読者になる | 更新情報をチェックする



JavaScript : ページを半透明にしてプロテクトし、スクロールしない固定ウインドウを開く

幅が固定で表示されているページはの width は、100% では無く固定にする必要があります。
( このページは固定です/document.getElementsByTagName("HTML")[0].scrollWidth+'px')

※ IEは標準モードで動作します
※ position:fixed が使えるのは IE7 以降です。opacity プロパティが使えるのは IE9 からのようです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
</head>
<body>
<script type="text/javascript">
function scriptTest(evt) {

	// ページ全体を覆う DIV の作成
	window.ds = document.createElement('div');
	ds.setAttribute('id','ds')
	ds.style.position='absolute';
	ds.style.width='100%';
	ds.style.height=document.getElementsByTagName("HTML")[0].scrollHeight+1600+'px';
	ds.style.left='0px';
	ds.style.top='0px';

	// IE8 までは、opacity プロパティが使えないようです
	var userAgent = window.navigator.userAgent.toLowerCase();
	if (userAgent.indexOf("msie") > -1) {
		ds.style.display = 'none';
		ds.style.backgroundColor = '#000000';
		ds.style.filter='alpha(opacity=50)';
	}
	else {
		ds.style.backgroundColor = '#000000';
		ds.style.opacity=.5;
	}

	// ページの最後に追加
	document.body.appendChild(ds);

	// IEのみ後表示
	if (userAgent.indexOf("msie") > -1) {
		ds.style.display = '';
	}

	// ページの手前で固定位置で動かない div を作成
	window.ds2 = document.createElement('div');
	ds2.setAttribute('id','ds2')
	ds2.style.position='fixed';
	ds2.style.width='400px';
	ds2.style.height='200px';
	ds2.style.left='100px';
	ds2.style.top='100px';
	ds2.style.backgroundColor = '#ffffff';
	document.body.appendChild(ds2);

	// div 内のコンテンツ( 元の状態に戻すボタン )	
	ds2.innerHTML = 
		'<INPUT type=button value="close" onclick="document.body.removeChild(ds);document.body.removeChild(ds2)">'

}
</script>
<input type="button" value="実行" onclick='scriptTest(event);'>
<br><br>
<img src="http://lightbox.cocolog-nifty.com/photos/app003/twitlink_b1.jpg" galleryimg="no" style='border-style:solid;border-width:1px;border-color:#000000' alt="Twitlink_b1" />
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

</body>
</html>



posted by at 00:23 | Comment(3) | ちょっと特別な JavaScript | このブログの読者になる | 更新情報をチェックする


2010年10月07日


JavaScript : コンボボックスにリストを追加する

<SCRIPT type="text/javascript">
function addCombo() {

	var combo = document.frm.combo;
	var option = null;
	var text = null;

	for( i = 0; i < 4; i++ ) {
		option = document.createElement("OPTION");
		option.setAttribute("value", i+1);
		text = document.createTextNode("オプション"+(i+1));
		option.appendChild(text)
		combo.appendChild(option)
	}

}
</SCRIPT>

<FORM name="frm">
<SELECT name="combo" style='width:150px;'>
</SELECT>
</FORM>

<INPUT type="button" value="データ追加" onclick='addCombo();'>



posted by at 18:12 | Comment(0) | JavaScript : 要素 | このブログの読者になる | 更新情報をチェックする



JavaScript : コンボボックスのリストを全て削除

options.item( i ) は、options[i] とする事もできます
<SCRIPT type="text/javascript">
function resetCombo() {

	var combo = document.frm.combo;
	var options = combo.getElementsByTagName("OPTION");
	var len = options.length;
	for( i = len-1; i >= 0; i-- ) {
		 combo.removeChild( options.item( i ) );
	}

}
</SCRIPT>

<FORM name="frm">
<SELECT name="combo" style='width:150px;'>
<OPTION value="1">データ1</OPTION>
<OPTION value="2">データ2</OPTION>
<OPTION value="3">データ3</OPTION>
<OPTION value="4">データ4</OPTION>
</SELECT>
</FORM>

<INPUT type="button" value="全て削除" onclick='resetCombo();'>


削除を最後から行っているのは、削除するたびにオブジェクト内のリスト
が更新されるので、前から削除できないからです。前から削除するには、
自分で配列に保存しておく必要があります
<SCRIPT type="text/javascript">
function resetCombo() {

	var combo = document.frm.combo;
	var options = combo.getElementsByTagName("OPTION");
	var len = options.length;
	var save = [];
	for( i = 0; i < len; i++ ) {
		save[i] = options.item( i );
	}
	for( i = 0; i < len; i++ ) {
		combo.removeChild( save[i] );
	}

}
</SCRIPT>

<FORM name="frm">
<SELECT name="combo" style='width:150px;'>
<OPTION value="1">データ1</OPTION>
<OPTION value="2">データ2</OPTION>
<OPTION value="3">データ3</OPTION>
<OPTION value="4">データ4</OPTION>
</SELECT>
</FORM>

<INPUT type="button" value="全て削除" onclick='resetCombo();'>


posted by at 17:59 | Comment(0) | JavaScript : 要素 | このブログの読者になる | 更新情報をチェックする


2010年10月06日


F12 で起動する IE の「開発者ツール」

最新の情報は以下の英文ページで知る事ができますが、日本語ページと同じではありません(なんか、英文のほうが古いです、IEからのHELP のリンクなのに)。

Using the F12 developer tools in IE11

▼ The DOM Explorer tool (CTRL + 1)

ここでよく使いそうな大きな変更は、color picker が追加された事です





▼ The Debugger tool

デバッガで知っておきたいのは、ソースマップを使って圧縮した JavaScript を圧縮前のソースコードとしてデバッグする方法です。






単に整形したいだけならば、{三} アイコンをクリックするだけです





▼ 以下は IE8 に関する古い記事です Ie8_tool1 F12 で起動すると、最初はこのようにウインドウが開きますが、これはこのままで 使うものでは無く、ブラウザのページとドッキングして使うものです。 ドッキングするには、赤い部分をクリックするか CTRL+P で切り替え可能です。 ( ドッキング状態では、CTRL+M で擬似的な最小化を行います ) Ie8_tool2
そして一番最初に試すのはこのボタンか CTRL+B で、このモードになって
ページ上でマウスカーソルを動かす事によって、HTML の要素をアウトライン
で探す事が出来、クリックで決定すると IE 開発者ツール側にその要素が選択
されます

Ie8_tool4

Ie_devtool
特定要素の輪郭を常に強調 後、メニューから簡単にテーブル等、構造が解りにくい要素の位置を常に アウトラインで表示できるようにする事ができます。 Ie8_tool_outline ※ 任意の要素も可能です Ie_devtool2 Microsoft ドキュメント Internet Explorer 開発者ツールを理解する
posted by at 13:30 | Comment(0) | ツール | このブログの読者になる | 更新情報をチェックする


2010年09月15日


WEBアプリケーションにおける「JavaScript」の役割

本来、WEB アプリケーションに JavaScript は必要ありません。

WEB アプリケーションの目的は、ブラウザから入力した情報をサーバーに送る事
が本来の目的ですので、サーバーサイドの PHP がその送られた情報をサーバーに
記録するという役割を持つ以上、JavaScript を必要としません。

極端な話、ブラウザは JavaScript の動作を禁止する事ができるので、ユーザに
よって、動くかどうか解らないものに頼るわけにはいかないのです。

しかし。

それで良いかと言えばそうでは無く、WEB アプリケーションの目的の殆どはビジ
ネスです。顧客をより多く得る為には、より豊かな表現力が必要になって来ます。
その際に活躍する「技術のうちの一つ」である事は誰も否定できないのです。

技術的には、JavaScript が活躍する部分は JavaScript のプログラマが作成し、
そのページは固定的にブラウザに送信する場合と、PHP がデータを元に動的に
JavaScript のコードを出力する場合があります。

当然後者は PHP と JavaScript を両方熟知したプログラマが作成する必要があり、
場合によっては、Flash の知識も必要ですし、基本的な HTML の知識も有している
必要があります。

よって、JavaScript だけのプログラマというのは WEB アプリケーションでは存在
せず、JavaScript の扱いを支援する為のライブラリばかりを作るプログラマという
人達が、かろうじて存在します。この人達は JavaScript の深淵にまで精通し、とて
も一般のプログラマが入っていけない領域を担当しています。

実は、実用レベルでは JavaScript のほうが他の言語よりもはるかに難解なのです。

ですから、WEB アプリケーションを目指すという事は、JavaScript に関しては、
それらの優秀なライブラリ群を使える人になるという事と同義であって、優先順位は
低いという事になります。

まず、PHP ですね。


posted by at 12:27 | Comment(0) | JavaScript | このブログの読者になる | 更新情報をチェックする



php のエッセンスのサンプル



csv を入力してテーブルとして表示するアプリケーションのサンプルですが、
できる限り PHP のエッセンスを組み込みました。配列が二つあって、二重
ループになっていますが、完成した状態から省いてシンプルにしていけば、
いいと思います。
完成形
<?

require_once("css.php");

$text = file_get_contents("data.csv");

$row = explode( "\r\n", $text );

echo "<pre>", print_r( $row, true ), "</pre>";

print "<TABLE border=1>";
for( $i = 0; $i < count($row)-1; $i++ ) {
	$col = explode( ",", $row[$i] );

	debug_data( $col, $i );

	// 行の作成
	$buffer = "";
	for( $j = 0; $j < count($col); $j++ ) {
		// 列の作成
		$buffer .= "<TD>{$col[$j]}</TD>";
	}

	print "<TR";
	print " style='cursor:crosshair' onmouseover='document.getElementById(\"data$i\").style.display=\"\"'";
	print " onmouseout='document.getElementById(\"data$i\").style.display=\"none\"'";
	print ">{$buffer}</TR>";
}
print "</TABLE>";

print $work;

function debug_data( $data, $no ) {

	global $work;

	$work .= "<pre id='data$no' style='display:none;position:absolute;left:300px;top:160px;'>";
	$work .= print_r( $data, true );
	$work .= "</pre>";

}

?>

上のソースコードから、デバッグ用の表示部分を省くと以下のようになります
デバッグなし
<?

require_once("css.php");

$text = file_get_contents("data.csv");

$row = explode( "\r\n", $text );

print "<TABLE border=1>";
for( $i = 0; $i < count($row)-1; $i++ ) {
	$col = explode( ",", $row[$i] );

	// 行の作成
	$buffer = "";
	for( $j = 0; $j < count($col); $j++ ) {
		// 列の作成
		$buffer .= "<TD>{$col[$j]}</TD>";
	}

	print "<TR>{$buffer}</TR>";
}
print "</TABLE>";

?>

さらに、表示を行だけにすると簡単になります。
行表示のみ
<?

require_once("css.php");

$text = file_get_contents("data.csv");

$row = explode( "\r\n", $text );

print "<TABLE border=1>";
for( $i = 0; $i < count($row)-1; $i++ ) {

	// 行の作成
	$buffer = "";
	$buffer .= "<TD>{$row[$i]}</TD>";

	print "<TR>{$buffer}</TR>";
}
print "</TABLE>";

?>

※ 注意
このサンプルはあくまで、PHP としてのサンプルであって、WEB アプリケーション
として望ましい形ではありません。実際の WEB アプリケーションでは、print や
echo で画面を表現する事をしないからです。


posted by at 10:55 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする


2010年09月13日


PHP における「現実的な」変数の意味

データを保存する場所

プログラミング言語において、「変数」は、データを一時的に保存する場所です。
また、殆どの場合保存する場所は PC のメモリになるのですが、WEB アプリケー
ションという特性上、PHP に限った事ではありませんが、ブラウザが表示している
HTMLの「FORM」内の「INPUT要素の値」も PHP にとっては変数と同じ役目を持って
います。

$_GET は、入力値を保持する「変数」ですが、PHP 側の処理が終了すると消えて
無くなってしまいます。しかし、画面のデフォルト値に埋め込めば、再び PHP が
呼び出された時にその値は保持されているはずです
<INPUT
	type="text"
	name="InTel"
	value="<?= $_GET['InTel'] ?>"
>

<SELECT name="InAddress">
<OPTION value="1" <?= $_GET['InAddress'] == "1" ? "selected" : "" ?>>大阪
<OPTION value="2" <?= $_GET['InAddress'] == "2" ? "selected" : "" ?>>京都
<OPTION value="3" <?= $_GET['InAddress'] == "3" ? "selected" : "" ?>>神戸
</SELECT>

<INPUT
	type="radio"
	name="InSex"
	value="0"
	<?= $_GET['InSex'] != "1" ? "checked" : "" ?>
>
<INPUT 
	type="radio"
	name="InSex"
	value="1"
	<?= $_GET['InSex'] == "1" ? "checked" : "" ?>
>

<INPUT
	type="checkbox"
	name="InCheck"
	value="1"
	<?= $_GET['InCheck'] == "1" ? "checked" : "" ?>
>
変数である事の主張

PHP では、変数は必ず $ からはじまるようになっています。これは、"" の
中で変数が記述された場合に、中身で置き換える事ができるようにする為です。
但し、この場合、変数の終わりの位置を決める必要がありますが、何もしなくても
「あきらかに」変数の終わりが解る場合は PHP が判断してくれます。ですが、
もし、PHP が判断できないような文字列があった場合は、以下のように {} で
挟むように決められています。
$x = "/";
$a = "abcd{$x}efgh";
変数の3つの形

プログラミング言語では、変数には「型」という種類が必ず存在しますが、
込み入ったものでも無い限り、PHP で最も意識する「型」は「文字列」と
言う型です。

文字列はたいていにおいて、「見たまま」の内容で、入力された値を最も
意識する必要があるのが WEB アプリケーションでもあります。そんな中、
変数の「ありかた」と言うものを3種類意識して処理を書く事が殆どとな
ります。

1) 単独

 $a というように、変数名一つに対して、値が一つ存在するものです。

2) 単純配列

 $a[0]、$a[1]、$a[2] ... と言うように、変数名一つに対して、複数
 値が存在しますが、複数の値を管理するのに「整数」を使うものです。

3) 連想配列

 $a["住所"]、$a["電話番号"]、$a["氏名"] ... と言うように、変数名
 一つに対して複数の値が存在し、複数の値を管理するのに「文字列」を
 使います

 結果的には、「連想配列」が他の「ありかた」を全て含むので、配列の
 内容を一括で取り出すような場合は、以下のような方法を取ることにな
 ります。
$a = array();

$a[] = "123";
$a[] = "456";
$a["山"] = "富士山";
$a[] = "789";
$a["湖"] = "琵琶湖";

foreach( $a as $Key => $Value ) {
	print "$Key : {$a[$Key]}<br />";
}

関連する記事

変数は乗り物で、function は部屋です。
PHPの「連想配列」: associative array


posted by at 18:36 | Comment(0) | PHP | このブログの読者になる | 更新情報をチェックする