Ajaxを使用していると、動的に追加されたコンテンツにボタンとかリンクとかがあって、そいつらにイベントハンドラを設定したい場合が多々あると思います。
私はこれまでは、Ajaxで取得したコンテンツをページに追加した後に、イベントハンドラを設定するコードを書いていたのですが、これって結構コードが美しくなかったりします。
でも、まあ、仕方ないよなー、とか思っていたのですが,jQueryのliveメソッドを使用すると、簡単に解決できてしまうことを発見。
ドキュメントを読むと、
	Attach a handler to the event for all elements which match the current selector, now and in the future.
現在及び将来において存在する要素に対してイベントハンドラを設定することができる、とのこと。
これは素晴らしい、と言うことで早速やってみる。
「追加」をクリックすると、Ajaxで部分コンテンツを取得して、ページに追加して、「削除」をクリックするとその要素が消える、といった感じのページを作ってみる。
31)

live関数を使用しない場合は、こんな感じで、部分コンテンツ取得後に「削除」リンクのイベントを設定するコードを書いてました。
	$(function(){
		
		//「追加」リンクをクリックで 簡単なDIV要素をAjaxで取得してドキュメントに追加するだけ
		$("#addLink").click(function(){
			$.get("./get_partial_content", function(html){
				$(document.body).append($(html));
				
				//削除リンクのイベント設定
				$(".deleteLink").click(function(){
					$(this).parent().remove();
				})
]			});
		});
		
	})
でも、この書き方だと、要素を追加するたびに、既存の削除リンクに対してもイベントハンドラを追加し続けてしまいます。この例では要素が削除されてしまうので、眼に見える害はありませんが、もしアラートを表示するような内容にした場合、何度も同じアラートが表示されるような削除リンクができあがってしまいます。
できればページ初期化時にイベント関連はまとめて設定しておきたいところです。
で、それを可能にしてくれるのがlive関数、というわけで、コードを次のように書き換えてみる。

	$(function(){
		
		//「追加」リンクをクリックで 簡単なDIV要素をAjaxで取得してドキュメントに追加するだけ
		$("#addLink").click(function(){
			$.get("./get_partial_content", function(html){
				$(document.body).append($(html));
			});
		});
		
		//上記のイベントで動的に追加されたDIV要素の「削除」リンクをクリックすると、自分自身(と親DIV)をドキュメントから削除する
		$(".deleteLink").live("click", function(){
			$(this).parent().remove();
		});
	})
	
こうすると、動的に追加されたコンテンツ内の class="deleteLink" の要素に対してもイベントハンドラが設定されます。
素晴らしい!