国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript – So verwenden Sie natives JS, um das Ereignis zu überwachen und mehr geladene Tags zu binden
天蓬老師
天蓬老師 2017-06-26 10:56:02
0
3
1005

Einige Projekte verwenden JS-Vorlagen, aber die Tags in der Vorlage sind HTML-Tags, deren Zeichenfolgen nicht normal ausgeführt werden. Nachdem die Ereignisbindung für die am Anfang der Seite geladenen Tags durchgeführt wurde, werden die sp?ter geladenen Tags nur dann geladen, wenn jQuery dies tut Mir f?llt nichts ein, was ich zum überwachen und Implementieren der Ereignisbindung verwenden k?nnte.
Das Projekt schreibt vor, dass Frameworks wie jQuery und zetpo nicht verwendet werden dürfen, daher m?chte ich wie im Titel fragen.

<p class="p">標(biāo)簽p</p>
<script>
    var ps = document.querySelectorAll('.p');
    for (var i = 0; i < ps.length; i++) {
        ps[i].addEventListener('click', function(){
            var that = this;
            console.log(that.innerText);
        })
    }
</script>
<script type="template">
    <p class="p">字符串標(biāo)簽p</p>
</script>
天蓬老師
天蓬老師

歡迎選擇我的課程,讓我們一起見證您的進(jìn)步~~

Antworte allen(3)
巴扎黑

事件委托吧,一個(gè)最基本的代碼如下!

window.onload = function(){
  document.onclick = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.className.toLowerCase() === 'p'){
         console.log(this.innerHTML);
    }
  }
}

document可以用其它元素代替,但是,代替的元素必須是一開始就存在!不能是頁面加載了再動(dòng)態(tài)加進(jìn)來的!

ringa_lee

一般都是事件委托

漂亮男人

事件委托是沒錯(cuò),說白了就是利用 DOM 的事件冒泡, @守候你 的答案說明了原理,也解決了基本的問題。但在實(shí)際應(yīng)用中還是會(huì)有一些局限,它只能處理終點(diǎn)擊的那個(gè)元素,而不是處理冒泡過程中遇到的元素。

我寫了一個(gè)冒泡過程中的示例:https://jsfiddle.net/4L7p5drb/1/

const outer = document.getElementById("outer");

/**
 * host,已經(jīng)存在的元素,用來綁定代理事件的
 * evnetName,事件名稱
 * predicate,用來判斷代理事件的目標(biāo)對(duì)象 (el: HtmlElement) => bool 類型
 * handler,處理函數(shù),(e: Event) => any 類型,其 this 指向?qū)嶋H目標(biāo)對(duì)象
 */
function proxyListener(host, eventName, predicate, handler) {
    host.addEventListener(eventName, e => {
        let target = e.target || e.srcElement;
        while (target !== host) {
            if (predicate(target)) {
                handler.call(target, e);
                // 這里沒有 break 主要是考慮一多層都擁有可判斷為 true 的對(duì)象呢
                // 可以根據(jù)實(shí)際需要加 break;
            }
            target = target.parentNode || target.parentElement;
        }
    });
}

proxyListener(outer, "click",
    t => t.classList.contains("middle"),
    function(e) {
        console.log("hit", this);
    });
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage