まず、delegate() メソッドについて公式が述べていることを見てみましょう。 delegate() メソッドは、指定された要素 (選択された要素の子要素) に 1 つ以上のイベント ハンドラーを追加し、いつ実行されるかを規定します。これらのイベントは、delegate() メソッドを使用する関数やイベント ハンドラーによって発生し、現在または将来の要素 (スクリプトによって作成される新しい要素など) に適用されます。
構文は非常に簡単です
$(selector).delegate(childSelector,event,data,function)
パラメータの説明
デリゲートの関数は、特定の型の共通の親要素によって呼び出されます。
listNode.delegate('.condition-remove','click',function(e){ e.preventDefault(); $(this).parents('.search-condition-item').remove(); });
完全な例 (達成される効果)
function renderSearchConditions(selectionId,conditions){var conditionsTemplate = '<div class="search-conditions-list-section">'+ '<ul class="search-conditions-list"></ul>'+ '</div>', listNode = $(conditionsTemplate); listItemTemplate = '<li class="search-condition-item" data-type="{conditonType}"><span>{condition}</span><a class="condition-remove" href="#">x</a></li>'; for(var key in conditions) { var condition = conditions[key].keyword, conditionType = conditions[key].type, listItemNode = $.substitute(listItemTemplate,{conditionType:conditionType,condition:condition}); listNode.append(listItemNode); } $(selectionId).prepend(listNode); listNode.delegate('.condition-remove','click',function(e){ e.preventDefault(); $(this).parents('.search-condition-item').remove(); }); }
1. バインドされたトランザクションで、トランザクション ソースを取得し、非表示メソッドを呼び出して、トランザクション ソース オブジェクトを渡します。
$(document).delegate("body", "click", function(e) { var ev = e || window.event; // 事务 //var target = ev.target || ev.srcElement; // 获得事务源 hide(ev.target || ev.srcElement, true); });
$(document) の欠点は、ページがロードされた後に一度トリガーされることです...
2. Hide メソッドで、トランザクション ソースが指定された要素から発行されるかどうか、つまり、トランザクション ソース要素が指定された要素の子要素であるか、それ自体であるかを判断します。
//子元素断定==== if (!!window.find)HTMLElement.prototype.contains = function(B) { return this.compareDocumentPosition(B) - 19 > 0 }; function hide(dom, isClick) { var nn,t,_isClick = !!isClick; try { for (var n in objList) { nn = objList[n]; t = nn.getOption("target")[0]; if (_isClick && (t == dom || t.contains(dom)))return; if (!_isClick || !nn.box[0].contains(dom)) nn.hide(); } } catch(e) { } }
3. 上記の非表示メソッドでは、isClick 変数によってクリック イベントがトリガーされるかどうかが決定されます。サイズ変更を処理するため。サイズ変更では、メモリ消費量を削減するために settimeout を使用して処理を行います。
var reTime = null; $(window).bind("resize", function() { if (reTime) clearTimeout(reTime); reTime = setTimeout(hide, 50); });