簡體   English   中英

綁定到動態添加的內容而無需jquery?

[英]Bind to dynamically added content WITHOUT jquery?

如果我要動態地向頁面添加表單(無論是通過AJAX還是其他JS),如何在頁面加載時將事件監聽器添加到這些元素上呢?

我知道用jquery綁定到父元素相當容易,就像這樣:

$(document).on('blur', 'input', function() {...})

但是我不清楚如何使用香草JS完成此操作,因為addEventListener必須直接應用於元素本身,並且無法指定事件應針對其傳播的父元素? (我想是吧..?)

這就是我要做的。 委托很簡單。 綁定到頂級父項。 距離越近,越好越快。 例如,如果要在特定的div委派事件,那會更好; 避免沖突。 event.target與您要event.target的目標進行比較,然后調用回調函數

 document.addEventListener('blur', function(event){ if(event.target.tagName == 'INPUT'){ onInputBlur.apply(this, arguments); } }, true); function onInputBlur(event){ // console.log(event); // event console.log(event.target.value); } 
 <input type="text"/> <input type="text"/> <input type="number"/> 

您可以像平時一樣輕​​松地在vanilla js中添加事件偵聽器。 惱人的焦點/模糊行為與大多數事件有點不同(請參閱: http : //www.quirksmode.org/blog/archives/2008/04/delegating_the.html#link2 ),因此要使其真正起作用,您需要添加一個選項卡索引到您的容器元素。

document.querySelector(".container").addEventListener("blur", function(e){ 
   if(e.target.tagName == "input"){
      // do stuff
   }
},false);

運行中的快速示例https://jsfiddle.net/2n0v43gc/ (編輯:要查看輸出,您需要打開控制台(Windows上為F12))

function addEvent(a,b,c){
document.addEventListener(a,e=> {
      if (e.target !== e.currentTarget) {
      if(e.target.id==b){
      c();
      }
      }
      e.stopPropagation();
  },false);
  }

像這樣使用:

addEvent("click","elem",function(){});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM