jQuery :: event delegationてナニ?
2009/9/27 (Sun) at 7:32 pm
jQuery関連の英文を読んでいるとdelegationていうワードがよく出てきて、私はその意味がわからなかった。辞書を引くと『委任』とか書いてあってますますわからない。event deligate でぐぐるとJavascriptだけでなく技術系のページがドバーと出てくるので、きっとプログラム専門家にはなじみ深いワードなのだろうと思ったりするけど、デザイナー風情にはチンプンカンプンですよ。
Karl Swedbergさんの書いた記事を読んで「そういうやり方があんのか!」とわかった(ような気がする)。これですよ↓
Working with Events, part 1 at Learning jQuery
記事の前半は「cssグルからJavascriptに足を踏み込んだばかりのみんなへ」というくらいのレベルの話で、後半のメインパートでは、私にとって疑問の種だったevent delegationについての基本的な話になる。後半パートが勉強になりました。簡単にいうとこういうことらしい。
tableやリストタグなどがよくある例だと思うが、極めて長大ロングで複雑にネストしたhtmlがあったとする。それらの中のとあるターゲット要素に対してイベントをbindしたいとする。その場合、私のような凡人はセレクタを駆使してそのターゲット要素をピンポイントすることに腐心するけれど、そういうふうに絞り込むんじゃなくて、グルリと回りを囲む親要素(tableとかulとか)にひとつだけイベントをわりあててしまう。大胆。そして、そのfunctionの中身において、ピンポイントしていくというやり方なのですね。絞り込むために、jQueryのイベントオブジェクトと適宜それに適したフィルタを類を使う。元記事のサンプルでは、isを使っています。
元記事の一番最後にあるサンプルがそれである。ターゲット要素を個別にセレクトしてイベントをわりあてるか、回りから責めていくかの違いだけれども、これをやることによってケースによってはコードがすごく短く書けるとか、イベントの割り当てがひとつだけなので動作が軽くなるとかの効果があるそうです。
おーそういうことかー、これをevent delegationというのであるか(てことですかね?)、とひとつ勉強した気になったけれど、これを知らなかった私はlive()を使うことによって既にソレ的なことを無意識にやっていたのかなと思われる。よく知らないけど、たぶんlive()はコレ的なことを内部でやってるのかなと。それなら別に中身を知らなくてもlive()を使ってりゃいいじゃないかという気もするけれど、知ってるのと知らないのでは大違いなので、教わってよかったと思った。
この記事が書かれたのは2008年の3月でずいぶん古いが、learningjquery.comの新しいエントリには、closest()の説明がある↓
Working with Events, Part 3: More Event Delegation with jQuery
event delegationちゅうもんをわかった上でclosest()を使うと、これまたレベルアップ間違いナシ!上の記事では、closest()に関するチュートリアル中心に、次バージョン1.4のことにも触れています。
コメント・プリーズ!
PROFILE![]()
藤居ヒロヤ。ウェブデザイナー/ウェブディレクター。ウェブデザインオフィス、3OT NET主宰。名古屋市中区。「優しいデザイン」「激しいデザイン」「正しいデザイン」「セクシーなデザイン」「泣けるデザイン」「もっともなデザイン」... 。あなただけのウェブデザインを丹精込めておつくり致します。見積り依頼等、お気軽にお問い合わせ下さい。
- www. http://www.3ot.net/
- email. admin [atmark] 3ot.net
- phone. 052 323 7376
RECENT ENTRIES![]()
- トウモロコシがおいしい
- ダイコクドラッグが近所にできた
- ライブドアのBLOGOSをよく読みます
- jQuery :: 画像のリロード
- タムの絵
- Javascript :: ecl.jsにながらくお世話になりました
- サーバ移転&ブログのデザインをすこし変えました
- php :: 正規表現 :: 名前つきキャプチャというのを習った
- jQuery :: ネストしたリスト + ui.sortable.js
- jQuery :: event delegationてナニ?
RECENT COMMENTS![]()
- トウモロコシがおいしい [4]
- ふ (07/09)
- いら (07/03)
- ふ (07/03)
- いら (07/03)
- php :: ファイルを強制的にダウンロードさせる [9]
- ふ (05/26)
- ふ (05/26)
- ふ (05/26)
- esperia (05/26)
- esperia (05/26)
- ふ (05/25)
- esperia (05/25)
- ふ (04/14)
- とほりすがり (04/13)
- タムの絵 [2]
- ふ (12/05)
- いら (12/04)
TOOLS![]()
- s-box.js
- Link2WikipediaEncoder
- QR_CodeGenerator
- PagerankChecker
- IntrocucePhpCodeOnBlog
- FaviconGenerator
- Whois
- SiteThumbnailGenerator (Beta)
- EmailAddressEncoder (Legacy!)
BOOKMARKS![]()
RESOURCES![]()
- 99designs
- COMPUTER ARTS
- CPAN
- PHP標準関数逆引き辞典
- SMASHING MAGAZINE
- UNIXコマンド
- ajaxload.info
- deviantART
- deviantART :: PS Brushes
- deviantART :: PS Shapes
- fotosearch.com
- hotscripts.com
- hotscripts.com :: php
- iconlet.com
- jQuery Reference
- php.net :: 関数レファレンス
- psbrushes.net
- turnkeyforms.com
ARCHIVE![]()
- 2010年7月 (1)
- 2010年1月 (1)
- 2009年12月 (2)
- 2009年11月 (3)
- 2009年10月 (1)
- 2009年9月 (9)
- 2009年8月 (7)
- 2009年6月 (7)
- 2009年5月 (1)
- 2009年4月 (8)
- 2009年3月 (1)
- 2009年1月 (1)
- 2008年12月 (3)
- 2008年11月 (1)
- 2008年4月 (1)
- 2008年1月 (3)
- 2007年12月 (1)
- 2007年10月 (3)
- 2007年9月 (5)
- 2007年8月 (4)
- 2007年7月 (13)
- 2007年6月 (22)
- 2007年5月 (30)
- 2007年4月 (15)
- 2007年3月 (12)
- 2007年2月 (7)
- 2007年1月 (16)
- 2006年12月 (23)
- 2006年11月 (9)
- 2006年10月 (3)
- 2006年9月 (2)
- 2006年8月 (6)
- 2006年7月 (4)
- 2006年6月 (6)
- 2006年5月 (10)
- 2006年3月 (17)
- 2006年2月 (8)
- すべての投稿 (266)
