ホームページ >ウェブフロントエンド >jsチュートリアル >jqueryのevent delegate()_jqueryの使い方を詳しく解説

jqueryのevent delegate()_jqueryの使い方を詳しく解説

WBOY
WBOYオリジナル
2016-05-16 15:18:141324ブラウズ

まず、delegate() メソッドについて公式が述べていることを見てみましょう。 delegate() メソッドは、指定された要素 (選択された要素の子要素) に 1 つ以上のイベント ハンドラーを追加し、いつ実行されるかを規定します。これらのイベントは、delegate() メソッドを使用する関数やイベント ハンドラーによって発生し、現在または将来の要素 (スクリプトによって作成される新しい要素など) に適用されます。
構文は非常に簡単です

$(selector).delegate(childSelector,event,data,function)

パラメータの説明

  • childSelector 必須。イベント ハンドラーがアタッチされる 1 つ以上の子要素を指定します。
  • イベントは必須です。要素に付加する 1 つ以上のイベントを指定します。
  • スペースで区切られた複数のイベント値。有効なイベントである必要があります。
  • データ オプション。関数に渡す追加データを指定します。
  • 関数が必要です。イベントの発生時に実行する関数を指定します。

デリゲートの関数は、特定の型の共通の親要素によって呼び出されます。

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);
 });
$(window) は元々使われていたものですが、IE8 以前ではバグがあったようです。

$(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);
 });
上記はjqueryのevent delegate()の使い方についてです。皆さんの学習に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。