技術のご紹介

このブログを購読する

IT開発センターBlog

ALLインクレ日誌ITニュース製品応用事例技術tips技術リリース

【JavaScriptTips】あとから追加された要素のイベントもハンドルできるliveメソッド

こんにちは。プロダクト事業本部の佐藤です。

最近jQueryliveメソッドがとっても便利だったので、これについてメモしておきたいと思います。

■イベントハンドラを登録

jQueryでイベントハンドラを登録する場合、普通ならbindメソッドを使って、


$('button.hello').bind('click', function(){
    alert('こんにちは!');
});

のように書くか、もしくはイベントごとに用意されているメソッド(たとえばclickメソッド)を使って

$('button.hello').click(function(){
    alert('こんにちは!');
});

というように書くのが一般的かと思います。

これらはどちらも同じ意味で、コードが実行された時点で「button.hello」というセレクタにマッチする要素(つまりhelloというclass属性を持つbutton要素)を探してきて、その要素にイベントハンドラを登録しています。

そしてliveメソッドですが、これは以下のようにして使います。

$('button.hello').live('click', function(){
    alert('こんにちは!');
});

書き方はbindメソッドと同じです。しかし、意味はちょっと違っています。

liveメソッドを使った場合、今後そのセレクタにマッチする全ての要素に対してイベントハンドラが登録されます。bindはその時点でマッチした要素が対象でしたが、liveの場合はあとから追加された要素に対しても有効です。1度liveメソッドを呼んでおけば、そのあと要素が追加されたとしても、セレクタがマッチするならイベントがハンドルされるのです。

■サンプル

サンプルを作ってみました。

<!-- HTML -->
<p>
    <button type="button" id="add_button">ボタン追加</button>
</p>
// JavaScript
$(function(){
    $('button#add_button').click(function(){
        var $b = $('<button type="button" class="hello">ボタン</button>');
        $('p').append($b);
    });

    $('button.hello').live('click', function(){
        alert('こんにちは!');
    });
});

サンプルを開く

ボタン追加をクリックすると、class属性にhelloを持つボタンがどんどん追加されます。そして、どのボタンをクリックしても「こんにちは!」が表示されます。

「こんにちは!」を表示するイベントハンドラの登録は最初に一度しかおこなっていませんが、あとから追加されたボタンに対してもイベント処理が有効になっているのがわかります。

■やめるときはdieメソッド

liveメソッドで登録したイベントハンドラを削除するときは、dieメソッドを使います。

$('button.hello').die();
$('button.hello').die('click');
$('button.hello').die('click', handler);

引数なしの場合は、liveで登録した全てのハンドラを削除します。第一引数(イベントの種類)だけを指定した場合は、そのイベントのすべてのハンドラを削除します。第二引数(ハンドラ)まで指定した場合は、そのハンドラだけを削除します。

■使いどころを見つければ便利

通常のbindとの使い分けが難しいところですが、liveを使えば決められたclass属性をつけるだけで自動的にイベントがハンドルされますので、デザインとロジックの分離に役立ち、便利です。他にもいろいろ使える場面が考えられます。

思いがけないところでイベント処理が実行されないように気をつける必要はありますが、便利なので上手に使っていきたいものです。

PAGE TOP

【コーディングTips】ブラウザ対応を効率的にする”IE*.js”

こんにちは、IT開発センターの小山です。
今日はクリスマス・イヴですね。
明日の準備がある方も無い方も少しの時間、技術Tipsにお付き合いください。

まずはこちらの画像をご覧下さい。レイアウトが崩れていますね。
Web制作をする者であれば誰もが初めに頭を悩ませる「カラム落ち」と呼ばれる現象です。
これは横幅の計算違いや回り込みの指定などによって起こるものなのですが、ブラウザの違いによっても起こります。

これによりWeb制作者は様々なブラウザでテストを繰り返して同じようにサイトが表示されるようにしなければなりません。

今ご覧になっている記事もきちんとブラウザチェックを経て公開されています。
このブラウザへの対応で一番頭を悩ませ、手間が掛かるのが5、6、7、8とバージョンの多いInternet explorer(以下IEと表記)への対応です。特にIE6への対応はとても頭を悩ませます。

そこで今回紹介するのがGoogleのjavascriptライブラリで提供されている「IE7~9.js」です。これを使えばこのようにずっと楽にIEへの対応ができるようになります。実装も簡単で下記のコードをHTMLの内に埋め込むだけで使えます。
(詳しくは参考URLをご覧下さい)

<head>
<!--[if lt IE 9]>
<script src=”http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js”></script>
<![endif]-->
</head>

特に最新版の「IE9.js」使った場合の恩恵として嬉しいのがボックスサイズの計算法の統一化です。IE6以下ではボックスの計算方法が違うので毎回その都度、計算し別のスタイルシートに記述したり最悪の場合ハックという方法を使わなければなりません。ですが「IE9.js」を使うことによりソースの複雑化や手間を省き効率化を図ることができます。この他にもこれらライブラリを使うことで透過PNGや未対応セレクタにも対応してくれます。至れり尽くせりですね。

ここで注意点があります。これらライブラリは擬似的に対応しているように見せかけているものなので全てのブラウザバージョンの問題を解決してくれるわけではありません。使用しても問題が修正ができない場合は個別に対応が必要になります。ですが使用しないよりもブラウザごとの表示に関する対応が大幅に軽減されるはずなので「IE7~9.js」それぞれをテストし、自分のコーディングスタイルに合ったものを使ってみていただければと思います。CSSコーディングに慣れない方にもオススメのライブラリです。

参考URL:http://code.google.com/p/ie7-js/

PAGE TOP

【画像補正】気になるゴミを簡単除去(スタンプツール)

こんにちは、IT開発センターの小野です。

いよいよ今週末はクリスマス。今年は25日が土曜日のため、
外出の予定を組んだり、なにかと忙しい方も多いのではないでしょうか。

外出先での美しい景色や思いでを残すために、デジタルカメラをお使いの方は多いと思いますが、撮った写真や画像を見てみると、せっかくの景色にゴミなど不要なものが写っていた経験はありませんか?

デザイン制作を行う際、支給頂く画像にも、こうしたものが含まれている場合がまれにあります。こんなとき、ちょっとしたゴミなら簡単に除去できる方法がありますので、ご紹介したいと思います。

今回ご紹介するのは画像補正などで一般的に活用されているPhotoshopの「スタンプツール」です。
スタンプツールはPhotoshopの標準的な機能として古いバージョンから搭載されており、画像補正や合成などで重宝する機能です。

スタンプツールは、その名の通り、指定した大きさの範囲をコピー(Alt+クリック)し、スタンプのように貼り付けるツールです。
これを利用すれば、掲載の画像のように空にゴミが写ってしまった場合などでも簡単に消すことができます。

コツとしては、なるべくぼかしの効いた選択範囲で、近くの同じ色合いの部分を指定することです。
この方法を利用すれば、電線を消したり、車のナンバーを消したりと、なるべく写ってほしくない部分のレタッチを行うこともできます。

最近ではフリーの画像加工ソフトやデジカメに付属される専用編集ソフトでも同様の機能が搭載されているようですので、気になる方はお試しになってはいかがでしょうか?

もし、「思い出の写真のゴミ・キズを直したい」という方がいらっしゃいましたら、写真プリントのノウハウもある弊社までご相談ください。

それでは、みなさま良き週末を。

PAGE TOP