SQLの窓

2014年07月03日


jQuery の trigger メソッドは、一括で既存の jQuery イベントを呼び出し、その時追加のパラメータを渡す事ができます

二つ並んでいるボタンと DIV をクリックすると、それぞれが click イベントによって、ピンク色になります。

一番下のボタンは、それらの定義済みの click イベントを一行で全て呼び出しています。但し、その時に色コードを渡しているので、結果としてピンクでは無く濃い灰色に変化します。

※ この場合の一括用セレクタは "[id*=target]" です。
※ パラメータは配列で渡し、イベント側でその数ぶんの仮引数を定義します。


<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script type="text/javascript">

$(function(){

	// 拡張パラメータにより、単独か trigger か判断できます
	$( "#target1" ).click( function( event, color ) {
		console.log( $( this ).val() );
		if ( color ) {
			$(this).css("background-color", color  );
		}
		else {
			$(this).css("background-color", "#ffc0c0"  );
		}
	});

	// 拡張パラメータにより、単独か trigger か判断できます
	$( "#target2" ).click( function( event, color ) {
		console.log( $( this ).val() );
		if ( color ) {
			$(this).css("background-color", color  );
		}
		else {
			$(this).css("background-color", "#ffc0c0"  );
		}
	});

	$( "#div_target" )
		.css({
			width: "300px",
			height: "30px",
			border: "1px solid #000000",
			"border-radius": "8px"
		})
		// 拡張パラメータにより、単独か trigger か判断できます
		.click( function( event, color ) {
			console.log( "クリックされました" );
			if ( color ) {
				$(this).css("background-color", color  );
			}
			else {
				$(this).css("background-color", "#ffc0c0"  );
			}
		});

	// **************************************************
	// trigger で呼び出した場合は、拡張パラメータを使用
	// するようにしているので単独でクリックした時と色が
	// 違います
	// **************************************************
	$( "#all" ).click( function() {
		// id に target の文字列を含む要素の click イベントを呼び出す
		$( "[id*=target]" ).trigger("click", [ "#c0c0c0" ] );
	});

});

</script>

<input type="button" id="target1" value="この文字を表示するボタン1">
<input type="button" id="target2" value="この文字を表示するボタン2">
<div id="div_target"></div>
<br>
<input
	type="button"
	id="all"
	value="上のコンテンツの click イベントを呼び出すボタン">
jQuery ドキュメント : .trigger


posted by lightbox at 2014-07-03 10:52 | メソッド:jQuery | このブログの読者になる | 更新情報をチェックする

2014年03月25日


JavaScript と jQuery : 位置関係から id の無い要素の参照を取得

SELECT 要素の後に、ボタンがあるとして、ボタンから SELECT要素を参照するのに、両方の要素を DIV で囲みます。

id を付けてしまえば簡単ですが、いくつも埋め込む前提ですと面倒です。このユニットで閉じてしまえる参照のほうが場合によっては便利です。

とりあえず、jQuery でも同じ機能を実装してみましたが、parent と children のメソッドでいずれもセレクタが使用できます。ただ、parent は特殊で、ここでは this の parent は一つしかありませんが、最初の jQuery オブジェクトが複数の場合、それぞれの親の中から選択するのが parent( "セレクタ" ) のようです。
<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>

<div>
   <select>
      <option value="http://winofsql.jp/download/WinOfSql102.zip">SQLの窓 Build C++</option>
      <option value="http://winofsql.jp/download/hanbaib.zip">簡易販売管理用DBデータ</option>
   </select> 
   <input type=button value="JavaScriptのみで取得" onclick='
         var a = this.parentNode;
         alert( a.getElementsByTagName("select")[0].value );
      '
   >
   <input type=button value="jQueryで取得" onclick='
         var a = $(this).parent().children("select").eq(0)
         alert( a.val() );
      '
   >
</div>



関連する記事

JavaScript : 同一階層(または下の階層)の要素を親経由で参照する


posted by lightbox at 2014-03-25 21:23 | メソッド:jQuery | このブログの読者になる | 更新情報をチェックする

2014年02月27日


JavaScript DOMとjQuery : 同一階層(または下の階層)の要素を親経由で参照する

ブログシステム側で作成される HTML 要素には name や id が付いていないものもたくさんあり、class が付く事は良くありますが、何も無い要素もたくさんあります。

そのような要素はその要素の親から getElementsByTagName で取得するのが一般的です。child のつながりで取得すると、不要なテキストノードとかが混じって、ブラウザによって結果も違うからです。

class で取得する場合は、IE に関してだけバージョン制限があり、IE9 以上で getElementsByClassName が使用できます。

しかし、結局のところこういう IE の事情により jQuery を使う事が最も簡単な解決方法となります。

3) は目的の要素にクラスがあるので使用していますが、もし無ければ順序番号で参照する事になります。jQuery のままで順序番号を使用するには、4) のように .eq(n) を使います。ただ、この程度の参照であれば、5) のように jQuery から DOM に変更して .value プロパティを使うのもいいと思います。、
<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>
<table>
<tr>
<td>
	<input
		class="message"
		type="text"
		name="jtext"
		value="こんにちは"
	>
	<br>
	1) <input
		type="button"
		value="getElementsByTagName"
		onClick='
			alert( this.parentNode.getElementsByTagName("input")[0].value );
		'
	>
	<br>
	2) <input
		type="button"
		value="getElementsByClassName"
		onClick='
			alert( this.parentNode.getElementsByClassName("message")[0].value );
		'
	>( IE は 9以上 ) 
	<br>
	3) <input
		type="button"
		value="jQuery parent and children 1"
		onClick='
			alert( $(this).parent().children(".message").val() )
		'
	>
	<br>
	4) <input
		type="button"
		value="jQuery parent and children 2"
		onClick='
			alert( $(this).parent().children().eq(0).val() )
		'
	>
	<br>
	5) <input
		type="button"
		value="jQuery parent and children 3"
		onClick='
			alert( $(this).parent().children()[0].value )
		'
	>
</td>
</tr>
</table>




1)
2) ( IE は 9以上 )
3)
4)
5)
この例では、name 属性で getElementsByName で取得できますが、name はページ内で複数存在する可能性も無いわけでは無いので、コードが見えている範囲だけで言えば、このほうが確実となります

関連する記事

JavaScript と jQuery : 位置関係から id の無い要素の参照を取得


タグ:javascript
posted by lightbox at 2014-02-27 18:38 | メソッド:jQuery | このブログの読者になる | 更新情報をチェックする

2014年02月11日


jQuery の .val() と .val('値') と一括変更用の .val(関数)

.val() はとても解りやすい便利なメソッドです。ちなにみに alert( $('#a1').val ) とすると .val メソッドのソースの内容が表示されます。

.val('値') もその逆ですから普通に使えてしまいますが、.val( 関数 ) はちょっと解りづらいです。関数が返した値で、オブジェクトの値を書き換えるのですが、その関数内では対象となったオブジェクトのインデックスと値が順次渡される仕様となっています。jQuery のドキュメントでは、無名関数で書かれていますが、以下のサンプルでは checkVal 関数として独立して定義して使用しています。関数内ではその時対象となるオブジェクトも参照できるので、使い方としては対象となるオブジェクトの値をキー(id)に対して明細を全て表示するような処理で使えます。( 明細は、XMLHttpRequest 等で取得 )
<script>
if ( !window.jQuery ) {
	document.write("<"+"script src=\"//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js\"></"+"script>");
}
</script>
<input class="action1" type="text" id="a1" value="lightbox" />
<input class="action1" type="text" id="a2" value="lightbox" />
<script type="text/javascript">

// val の引数として与える関数のサンプル
// もちろん無名関数でも良い
function checkVal( index, value ) {
	console.log(this.id);
	alert( index + "|" + value + " : これは入力フィールドのインデックスと現在の値です" );
	return( '変更' );
}

function action1() {

	// 現在の値の取得
	var x = $('#a1').val();

	// 表示
	alert("この値は、id=a1 の入力フィールドの現在の値です => "+x);

	// 現在の値を変更
	$('#a1').val('123');

	// 内容を変更する関数を呼び出す
	// input を両方変更するように、
	// index が変化しながら全て呼び出される
	$('input.action1').val(checkVal);

}

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


もう少し具体的なサンプル

jQuery の .val(関数) を使用した、社員コードに対する明細データの表示サンプル


posted by lightbox at 2014-02-11 05:30 | メソッド:jQuery | このブログの読者になる | 更新情報をチェックする

2013年02月21日


$.extend メソッドで jQuery の中に処理を書いて、その中で使ったデータをグローバルで使えるようにする

重要な事

$.extend( object, object ) で、前のオブジェクトに後のオブジェクトが追加されます。ですから、前のオブジェクトに $ を指定し、後のオブジェクトに { メソッド名 : function(引数) {処理} } を指定すればいい事になります。

グローバル変数に使う

また、この extend では、単純な変数としての JSON オブジェクトに利用して、window.mydata = {} として空のオブジェクトをグローバルに作っておいて、jQuery の内部で処理したデータを extend メソッドで追加させます。

そうすると、(ここでは)後から mydata.ken と mydata.hour と mydata.browser で参照できる事になります。



<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
window.mydata = {};

$.extend( $, { myfunc: function( url, target, item ) {
		$.ajax({
		// javascript の実行分を書いたテキストを呼び出す
			url: url,
			cache: false,
			dataType: "json"
		}).done( function( result, textStatus, jqXHR ) {
			// result がそのまま JSON オブジェクトです
			$.extend( window.mydata, result );
			var op = null;
			for( var i = 0; i < result[item].length; i++ ) {
				op = document.createElement("option");
				$(op).append(result[item][i]);
				$(target).append(op);
			}
		});
	}
} );

$(function () {

	$.myfunc("http://lightbox.on.coocan.jp/ken.php", "#target1", "ken" );
	$.myfunc("http://lightbox.on.coocan.jp/hour.php", "#target2", "hour" );
	$.myfunc("http://lightbox.on.coocan.jp/browser.php", "#target3", "browser" );

	console.dir(mydata);

});

</script>

<select id="target1">
</select>
<hr />
<select id="target2">
</select>
<hr />
<select id="target3">
</select>

文法的に重要なところ

result[item] は、最初の処理では result.ken と同じ内容を参照をします。JavaScript のオプジェクトのプロパティの参照方法は、識別子として参照する方法と、["文字列"] という連想配列(のようなもの)として参照する方法があります。

ですから、後者では動的(文字列変数を使って)に JSON の内部を参照可能になります
ken.php
<?
header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: text/plain; Charset=utf-8" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

print '{"ken" : ["北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県","茨城県","栃木県","群馬県","埼玉県","千葉県","東京都","神奈川県","新潟県","富山県","石川県","福井県","山梨県","長野県","岐阜県","静岡県","愛知県","三重県","滋賀県","京都府","大阪府","兵庫県","奈良県","和歌山県","鳥取県","島根県","岡山県","広島県","山口県","徳島県","香川県","愛媛県","高知県","福岡県","佐賀県","長崎県","熊本県","大分県","宮崎県","鹿児島県","沖縄県"]}';

?>

hour.php
<?
header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: text/plain; Charset=utf-8" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

print '{"hour" : ["1時間","2時間","3時間","4時間","5時間","6時間","7時間","8時間","9時間","10時間","11時間","12時間","18時間","19時間","20時間","21時間","22時間","23時間","24時間"]}';

?>

browser.php
<?
header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: text/plain; Charset=utf-8" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

print '{"browser" : ["chrome","firefox","ie6","ie7","ie8","ie9","ie10","safari","opera"]}';

?>

php を使用しているのは、Access-Control-Allow-Origin: * を出力する為で、これによって、別ドメインからのデータの読み込みを JavaScript( クライアント ) から可能になります。

ですから、IE8 や IE9 以外( それより前は論外 ) ならば、このコードを普通に実行して、データがセットされたコンボボックスを作成する事が出来るはずです。





posted by lightbox at 2013-02-21 10:00 | メソッド:jQuery | このブログの読者になる | 更新情報をチェックする

2012年02月04日


jQuery のイベント名によるイベント登録の中身

以下のように、each メソッドで登録されています。引数が無い場合は trigger 処理となり、イベント登録は、on メソッドで行われているので return arguments.length > 0 の部分でその判断をしています。

※ bind でも on メソッドで登録されています。
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

	// Handle event binding
	jQuery.fn[ name ] = function( data, fn ) {
		if ( fn == null ) {
			fn = data;
			data = null;
		}

		return arguments.length > 0 ?
			this.on( name, null, data, fn ) :
			this.trigger( name );
	};

	if ( jQuery.attrFn ) {
		jQuery.attrFn[ name ] = true;
	}

	if ( rkeyEvent.test( name ) ) {
		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
	}

	if ( rmouseEvent.test( name ) ) {
		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
	}
});

※ jquery-1.7.1.js



タグ:jquery
posted by lightbox at 2012-02-04 02:30 | メソッド: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 終わり