recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Posez une question à ce sujet en JS.

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é ^_^.

滿天的星座滿天的星座2768 Il y a quelques jours857

répondre à tous(7)je répondrai

  • 滿天的星座

    滿天的星座2017-07-05 10:51:51

    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

    répondre
    0
  • 大家讲道理

    大家讲道理2017-07-05 10:51:51

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

    répondre
    0
  • 学习ing

    学习ing2017-07-05 10:51:51

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

    répondre
    0
  • 阿神

    阿神2017-07-05 10:51:51

    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 ?

    répondre
    0
  • 为情所困

    为情所困2017-07-05 10:51:51

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

    répondre
    0
  • 为情所困

    为情所困2017-07-05 10:51:51

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

    répondre
    0
  • 淡淡烟草味

    淡淡烟草味2017-07-05 10:51:51


    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

    .

    répondre
    0
  • Annulerrépondre