javascript - Posez une question à ce sujet en JS.
滿天的星座
滿天的星座 2017-07-05 10:49:51
0
7
825

Pourquoi l'événement onclick n'est-il pas déclenché à cet endroit ? Si vous pouvez obtenir l'objet DOM du li actuellement cliqué dans jquery, ne peut-il pas être utilisé dans JS comme celui-ci ?

$(document).ready(function(){
    $("ul li").click(function(){
        console.log($(this));//打印出当前被点击的li的jquery对象
        console.log(this);//打印出当前被点击的li的dom对象
    });
});
window.onload = function(){
    var lis = document.getElementsByTagName("li");
    lis.onclick = function(){
        console.log("111");
        console.log(this);
    }
}

Modification :

window.onload = function(){
    var lis = document.getElementsByTagName("li");
    Array.from(lis).forEach(function(el) {
        console.log("111");
        console.log(this);
    })
}
<p>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</p>

Merci à tous, j'ai déjà utilisé jquery, mais maintenant je regarde à nouveau js et j'ai trouvé de nombreux problèmes. Je ne ferai plus ce genre d’erreur stupide à l’avenir, je suis très impressionné ^_^.

滿天的星座
滿天的星座

répondre à tous(7)
滿天的星座

Pouvez-vous cliquer pour déclencher cet événement ? Je peux utiliser segmentFault.


Mais il y a un léger problème avec votre code. getElementsByTagName renvoie un objet de type tableau

Vous devez le parcourir puis attribuer la valeur onclick à chaque élément

大家讲道理

n'est pas la raison de this.

onclick 是 DOM 的事件。但是此时的 lis Ce n'est pas du tout un dom, mais une collection de DOM.

jQuery peut le gérer car $("ul li") renvoie un objet jQuery Lorsque la fonction click est appelée dessus, jQuery utilisera implicitement une boucle.

Bien que la fonction lis 很像数组,但是却不是数组。因此可以使用 Array.from le transforme en un véritable tableau.

window.onload = function(){
    var lis = document.getElementsByTagName("li");
    Array.from(lis).forEach(function(el) {
        console.log("111");
        console.log(this);
    })
}
学习ing

lis = document.getElementsByTagName("li") obtient un tableau.
Comment lier les événements ?

阿神

Essayez de ne pas utiliser .onclick() pour écrire l'événement click ; utilisez addEventListener('click', function(){console.log(this)}); ajoutez l'événement click et voyez s'il peut être déclenché. c'est parce que vous avez lis. Onclick est-il un tableau qui ne fonctionne pas pour cette raison ?

为情所困

Le deuxième morceau de code est mal écrit. lis est un tableau, pas un objet dom, donc définir onclick est inutile
Changez-le par ceci

window.onload = function(){
    var lis = document.getElementsByTagName("li");
    Array.from(lis).forEach((li) => {
        li.onclick = function(){
            console.log("111");
            console.log(this);
        }
    })
}
为情所困

Utilisez getElementsByClassName这个方法吧,把getElementsByTagName pour l'encapsuler directement et il peut être utilisé comme opération dom

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all :
        oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\-");
    var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");
    var oElement;
    for(var i=0; i < arrElements.length; i++){
        oElement = arrElements[i];
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }
    }
    return (arrReturnElements)
}
淡淡烟草味


Comme le montre l'image ci-dessus, votre lis est imprimé sous la forme d'un tableau d'objets. Selon votre idée, vous devez parcourir lis pour vous lier en un clic à chaque objet li

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal