そのため、連結は日常の開発で広く使用されており、イベント メソッドの連結は特殊なケースです。複数のイベントを Dom オブジェクトにバインドすると、シリアル書き込みに慣れていますが、この書き込み方法では時間の冗長性が生じます。
1. イベントの冗長性: 複数のイベント メソッドで同じコードを複数回呼び出す
次のコードはイベント メソッドを連結したものです:
jQuery(function($) {
$('
').hide().appendTo('body');
vartipTitle = '';
$('#mytable').bind('mouseover', function(event) {
var $link = $(event.target).closest('a');
if ($link.length) {
var link = $link[0]; link.title;
link.title = '';
$('#livetip').css({
上:event.pageY 12,
left:event.pageX 12
})
.html('
'tipTitle '
' link.href '
')
.show()
};
}).bind('mouseout', function(event) {
var $link = $(event.target).closest('a');
if ($link.length) {
$link.attr('タイトル',tipTitle);
$('#livetip').hide();
}).bind('mousemove', function(event) {
var $link = $(event.target).closest('a');
if ( $link.length) {
$('#livetip').css({
上:event.pageY 12,
left:event.pageX 12
});
}); 5|6、18|19、および 24|25 は、同じコード部分を複数回使用して、イベント オブジェクトが存在するかどうかを判断します。これは、コード効率とコード ファイル サイズの点で不合理な方法です。
2. イベント委任: 複数のイベントを一度にバインドし、イベント カテゴリに従って対応する操作を委任します。
上記のコードをより最適化するために、イベント委任を通じてコードを変更できます。最終的なコードは次のとおりです。
コードをコピー コードは次のとおりです。
if (!$ link.length) { return; }
var link = $link[0];
if (event.type == 'mouseover' ||event.type == 'mousemove') {
$liveTip .css({
top:event.pageY 12,
left:event.pageX 12
}); ') {
tipTitle = link.title;
link.title = '';
$liveTip.html('
'tipTitle '
' href '< /div>')
.show()
if (event.type == 'mouseout') {
$liveTip.hide(); if (tipTitle) {
link.title =tipTitle;
});
イベントは処理対象のDOMオブジェクトにバインドされており、イベントのカテゴリを判断してコード内で異なる処理コードを委譲します。これにより、コードの繰り返し定義を回避して、時間の冗長性を回避する効果を得ることができます。
上記 2 つのコードの実行効果はまったく同じで、どちらのコードの実行効率が高いかが一目でわかると思います。
デモのアドレス
http://demo.jb51.net/js/event_delegation/index.html
パッケージのダウンロード
http://www.jb51.net/jiaoben/28044。 html