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

javascript - Comment utiliser JS natif pour écouter des événements pour lier davantage de balises chargées
天蓬老師
天蓬老師 2017-06-26 10:56:02
0
3
1008

Certains projets utilisent des modèles JS, mais les balises du modèle sont des balises HTML dont les cha?nes ne s'exécutent pas normalement. Une fois la liaison d'événement effectuée sur les balises chargées au début de la page, les balises chargées ultérieurement ne seront chargées que si jQuery l'est. utilisé. Je ne trouve rien à utiliser pour surveiller et implémenter la liaison d'événements.
Le projet stipule que les frameworks tels que jQuery et zetpo ne peuvent pas être utilisés, je voudrais donc demander, comme dans le titre.

<p class="p">標簽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">字符串標簽p</p>
</script>
天蓬老師
天蓬老師

歡迎選擇我的課程,讓我們一起見證您的進步~~

répondre à tous(3)
巴扎黑

Délégation événementielle, le code le plus basique est le suivant !

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);
    }
  }
}

Le document peut être remplacé par d'autres éléments, mais l'élément remplacé doit exister depuis le début ! Il ne peut pas être ajouté dynamiquement après le chargement de la page?!

ringa_lee

Habituellement, délégation événementielle

漂亮男人

La délégation d'événement est correcte. Pour parler franchement, elle utilise le bouillonnement d'événements DOM. La réponse de @Waiting for You explique le principe et résout le problème de base. Cependant, il existe encore certaines limites dans les applications pratiques. Il ne peut traiter que l'élément sur lequel on a finalement cliqué, plut?t que les éléments rencontrés lors du processus de bullage.

J'ai écrit un exemple du processus de bouillonnement?: https://jsfiddle.net/4L7p5drb/1/

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

/**
 * host,已經(jīng)存在的元素,用來綁定代理事件的
 * evnetName,事件名稱
 * predicate,用來判斷代理事件的目標對象 (el: HtmlElement) => bool 類型
 * handler,處理函數(shù),(e: Event) => any 類型,其 this 指向?qū)嶋H目標對象
 */
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 的對象呢
                // 可以根據(jù)實際需要加 break;
            }
            target = target.parentNode || target.parentElement;
        }
    });
}

proxyListener(outer, "click",
    t => t.classList.contains("middle"),
    function(e) {
        console.log("hit", this);
    });
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal