人気ブログランキング |
<   2012年 11月 ( 35 )   > この月の画像一覧
(JavaScript)jQueryを使って外部JavaScriptを動的に読み込む
Ajaxなページを作っていると、JavaScriptファイルも動的に読み込ませたくなります。
jQueryを使うと簡単に外部JavaScriptファイルを読みこませるできます。

こんな感じです。
$.getScript("./test.js", function(){
});



もし、読み込んだ後に、処理したければコールバック関数に処理を書いてやればOKです。
$.getScript("./test.js", function(){
alert("読み込み完了");
hoge();
});


jQueryってほんと便利ですね。

参考:
[jQuery] 外部JavaScriptファイル読込みに関する考察|A Day In The Boy's Life
逆引きjQuery:非同期でJavaScriptのコードを取得するには? - @IT
by Jehoshaphat | 2012-11-12 01:54 | Webがらみ
(JavaScript)連想配列のループ
JavaScriptにはPHPやC#で言う所のforearch構文の代わりに、for in 構文でループが出来るようです。
こんな感じ。
var arytest = { "name" : "安部礼司", "age":39 , "nickname":"平均", "bloodtype":"A" };
for (var key in arytest) {
if ( key == "bloodtype" ) break;
alert("キー:" + key + " 値:" + arytest[key]);
}



ちなみに、jQueryを使って配列をforeach的に処理することも可能なようです。
var arytest =  { "name" : "安部礼司", "age":39 , "nickname":"平均", "bloodtype":"A" };
jQuery.each(arytest, function(key, value) {
if ( key == "bloodtype" ) return false; //ループを抜けるときはfalseを返す。
alert("キー:" + key + " 値:" + value);
});


参考:
JavaScript の配列と連想配列の違い - IT戦記
JavascriptでPerlやPHPのforeachするスクリプトの書き方 - Layer8 Reference
jQuery.each(object, callback) - jQuery 日本語リファレンス
jQuery for each 連想配列 - mmj
by Jehoshaphat | 2012-11-12 00:51 | Webがらみ
(JavaScript)jQueryでテキストボックスに入力ヒントを表示する
最近、入力フォームのテキストボックスに予めヒントの文字列が入っており、フォーカスが入るとヒントが消え、テキストが入力できるようになるみたいなWEBが増えています。
それを jQuery を使って実装してみました。

参考にさせてもらったのは、フォームに入力ヒントを与えるjQuery - YATのBlog非フォーカス時にヒントの表示されるテキストボックス - jQuery 日本語リファレンスです。

HTML側はこんな感じです。
<form  method="post" action="Check" id="input">
<!-- title属性にヒントとなる文字列を入れておく -->
<input type="text" title="備考を入力。" id="memo" name="memo" class="input_hint">
<input type="submit" value="送信">
</form>



CSS側
/*ヒント用スタイルシート*/
input.input_hint{
color:#666666;
}



JavaScript側
$(function(){
//テキストボックスの値に、title属性に設定しているヒントを表示
$("#memo").val( $("#memo").attr('title') );
textFill($('#memo'));

//フォーカスによって、テキストボックスの値を変えるための関数。
function textFill(input){
var originalvalue = input.attr('title');
input.focus( function(){
//フォーカスが入ったとき
if( $.trim(input.val()) == originalvalue ){
//CSSを直接変更するという方法もあるが、今回はヒント用スタイルシートを外す設定に
input.removeClass("input_hint");
//値をクリア
input.val('');
}
});
input.blur( function(){
//フォーカスが外れたとき
if( $.trim(input.val()) == '' ){
//値が入力されなかったら再度ヒント表示
input.val(originalvalue);
input.addClass("input_hint");
}
});
input.parents('form:first').submit(function(){
//フォース送信時に、ヒントの内容を送らないようにする
if(input.val()==input.attr('title')){
input.triggerHandler('focus');
}
}).end()
}
});

by Jehoshaphat | 2012-11-11 21:47 | Webがらみ
(JavaScript,ActiveX)WSHを使ってコンピュータ名とWindowsユーザ名を取得する

イントラネット向けのWEBサイトを作っており、Windowsユーザ名を取得する必要が出てきました。
(アクセス元IPアドレスを収集してもいいんですが、それだとターミナルサーバ使っている場合にどのユーザかわからないので。。。)

クライアントのブラウザはIEで統一しているので、ブラウザ上でJScriptを走らすことで取得できます。

以下のような感じです。

//ユーザ名、コンピュータ名取得
if(navigator.appName=="Microsoft Internet Explorer"){
try {
var objNetWork = new ActiveXObject("WScript.Network");
alert("コンピュータ名" + objNetWork.ComputerName);
alert("ユーザ名" + objNetWork.UserName);
//JQueryを使ってinput要素のvalueに値追加
$("#computer_name").val(objNetWork.ComputerName);
$("#win_user_name").val(objNetWork.UserName);
objNetWork = null;
} catch(e) {
//安全が保障されないActiveXを生成する際に例外が投げられる
alert('セキュリティ設定が高すぎるため実行ない。');
}
}

しかし、デフォルトの設定で上記を走らしても、動きません。
IEで以下の設定をする必要があります。

インターネットオプション→セキュリティタブで、上記スクリプト使用サイトが、ローカルイントラネットもしくは、信頼済みサイトゾーンにいることを確認。
属しているゾーンの "レベルのカスタマイズ" で、"スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行" を有効にする。


しかし、IE以外では動かないのが難点ですね。

参考:
ActiveXが利用出来ない場合の見分け - まっしかく備忘録
上級ユーザー向けの Internet Explorer セキュリティ ゾーン関連のレジストリ エントリ
訪問者のブラウザやOS情報を取得、ブラウザ判定|window.navigatorオブジェクト|JavaScript/DOM
by Jehoshaphat | 2012-11-11 07:00 | Webがらみ
(JavaScript)空文字判定を行う簡単な方法
空文字判定を行う簡単な方法ですが、JavaScriptでは if 分の中で、空文字を評価すると false になります。
ということで、下記だけで判定が可能です。

var str="";
if ( str ){
alert("空文字でない");
}else{
alert("空文字である");
}


ちなみに、[JavaScript] オブジェクトがnullやundefindでないか評価する。 - うなの日記 を参考にさせてもらったところ、値ごとでifの評価をすると以下のようになるようです。



値 :ifで評価した結果
Object :true
undefined:false
null :false
0 :false
1 :true
-1 :true
""(空文字列):false
"a" :true
配列 :true
ハッシュ :true


例えば0かどうかを判断するときに変数だけで評価できるなどお手軽ですが、明示的に比較対象を指定していたほうが良い時もあるので、よく考えて使わないといけませんね。
by Jehoshaphat | 2012-11-11 00:38 | Webがらみ
(JavaScript)match関数を使った正規表現チェックでハマッた
JavaScriptで以下のようにmatch関数を使っていたんですが、一致する値をフォームに入力しても値がnullになります。
//要素選択は、jQueryを使用
alert( $("#tel").val().match('/^[0-9-]{6,9}$|^[0-9-]{12}$/') );


で、よくよく match() の使い方を見たら、パターン文字列はクォーテーションで囲む必要がないんですね。

なので、正しくは下記のとおりになるようです。
//要素選択は、jQueryを使用
alert( $("#tel").val().match(/^[0-9-]{6,9}$|^[0-9-]{12}$/) );


パターン文字列を変数に入れたい時もクォーテーションで囲む必要がありません。
var ptn = /^[0-9-]{6,9}$|^[0-9-]{12}$/;
//要素選択は、jQueryを使用
alert( $("#tel").val().match( ptn ) );


match関数は、マッチすればその値を配列で、マッチしなければnullを返すようです。


参考:
JavaScript - String - match()
正規表現(RegExp)
matchの戻り値って - プログラマ的京都生活
by Jehoshaphat | 2012-11-10 22:37 | Webがらみ
(Solaris)インストールしているパッケージの一覧や詳細を確認する方法
Solarisでは pkginfo コマンドでパッケージの管理ができるようです。

システムにインストールされているパッケージを一覧表示するには、単にpkginfoコマンドを叩きます。

# pkginfo | grep "Sun Ray Core"
system SUNWlibusbut Sun Ray Core Services support for libusb API (opt)
system SUNWuta Sun Ray Core Services Administration Software (opt)
system SUNWutesa Sun Ray Core Services module for SunMC agent (opt)
system SUNWutesc Sun Ray Core Services module for SunMC (opt)
system SUNWutfw Sun Ray Core Services Firmware Files (opt)
system SUNWutgsm Sun Ray Core Services AMGH (opt)
system SUNWutk Sun Ray Core Services Drivers (usr)
system SUNWutm Sun Ray Core Services Man Pages (opt)
system SUNWuto Sun Ray Core Services Core Software (opt)
system SUNWutps Sun Ray Core Services Auth Manager PAM Module (opt)
system SUNWutr Sun Ray Core Services Configuration (root)
system SUNWutref Sun Ray Core Services Reference Software (opt)
system SUNWutscr Sun Ray Core Services Smartcard Reader Driver components (opt)
system SUNWutstk Sun Ray Core Services mass storage drivers (usr)
system SUNWutsto Sun Ray Core Services mass storage software (opt)
system SUNWutstr Sun Ray Core Services mass storage configuration (root)
system SUNWutu Sun Ray Core Services Configuration (usr)

パッケージの詳細を見るには -l オプションを付けます。

# pkginfo -l SUNWuto
PKGINST: SUNWuto
NAME: Sun Ray Core Services Core Software (opt)
CATEGORY: system,sunray
ARCH: i386
VERSION: 4.0_48,REV=2007.08.01.15.08
BASEDIR: /opt
VENDOR: Sun Microsystems, Inc.
DESC: core services and resources, management and user commands
PSTAMP: SunOS_5.10_20070801154126
INSTDATE: 10月 16 2012 17:43
HOTLINE: Please contact your local service provider
STATUS: 完全にインストールされました。
FILES: 160 のインストールされたパス名
10 の共有パス名
25 のディレクトリ
116 の実行可能ファイル
2 の setuid/setgid 実行可能ファイル
15885 ブロック (概算値) が使われました

by Jehoshaphat | 2012-11-10 21:36 | Unix
(Excel)第一曜日を求めたい
ある年月に対して、その年月の第一曜日を求めるための数式です。
今回は第一土曜日を求めることとします。

答えから言うと以下の式で求めることができます。
(A1セルに求めたい年月の日付が入っているとします)

=DATE(YEAR($A$1),MONTH($A$1),1)+7-WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1))

解説ですが、まず以下式でその年月の一日目の曜日の値を取得します。

=WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1))

WEEKDAY関数は曜日を数値として返しますが、規定では下記のように日曜日起点で1-7の値になります。

日 月 火 水 木 金 土
1 2 3 4 5 6 7


次に、求めたい曜日と、その月の1日の曜日の差を求めます。
(今回は第一土曜日なので、上記WEEKDAY関数の値を照らし合わせると7になります)

=7-WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1))


最後に、その月の1日の値に、上記で求めた差を足せばいいわけなので、最初に提示した式になります。

ちなみに、第二曜日や第三曜日は7の倍数をかけてやれば求めれますね。
例えば第三日曜日を求める式は以下のようになります。

=DATE(YEAR($A$1),MONTH($A$1),1)+1-WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1)) +(7*3)

by Jehoshaphat | 2012-11-09 00:10 | 豆知識
グループポリシーの適用状態を確認したい
現在ログインしてるユーザ/コンピュータ(もしくは任意のユーザ/コンピュータ)で、どのようなグループポリシーが適用されるのか知りたい時があります。

このようなときに有用なのが、グループ ポリシー結果 (GPResult.exe) コマンド ライン ツールです。

基本的には、gpresult をコマンドプロンプトで実行するだけで現在使用のコンピュータ/ログイン中のユーザで、どのグループポリシーが適用されるかが表示されます。

任意のコンピュータ/ユーザにするには下記のようなパラメータをつけるといいようです。

任意のコンピュータ
gpresult /s 任意のコンピュータ名

任意のユーザ
gpresult /u ドメイン\ユーザ名


参考:
Windows XP Professional : グループ ポリシー結果 (GPResult.exe) コマンド ライン ツールの使用方法
by Jehoshaphat | 2012-11-09 00:02 | 豆知識
(PHP)Qdmailを使い添付ファイル付きメールを送る
(cakePHP)Qdmailを使った日本語メール送信 で cakePHP から Qdmail を使う方法を書きました。

今回はフレームワークを使わない環境で、添付ファイル付きのメールを送る場合の例です。

こんな感じでOKなようです。

require_once('qdmail.php');
 
//メール送信
$mail = new Qdmail();
 
$mail->to( 'to@hogehoge.jp' );
$mail -> subject( '件名' );
$mail -> text( 'メール本文' );
$mail -> from( 'from@hogehoge.jp' , '送信元日本語名' );
 
//添付ファイル指定
$attach[] = array( 'uploads/hoge.jpg' , '添付ファイル名1' );
$attach[] = array( 'uploads/hoge2.jpg' , '添付ファイル名2' );
$mail -> attach ( $attach );
 
//メール送信
if( ! $mail->send() ){
//メール送信エラー時
$message = print_r($mail->errorStatment(false),true);
)


非常に簡単ですね。


参考:
基本的な使い方-OOP編 - Qdmail
添付ファイルの指定(OOP) - Qdmail
by Jehoshaphat | 2012-11-08 23:48 | PHP開発