Javascript .on()在一组<;李>;元素

Javascript .on()在一组<;李>;元素,javascript,jquery,html,Javascript,Jquery,Html,当我的悬停时,我尝试使用.on()jQuery函数调用一些东西 当我尝试这样做时: $("body").on({ mouseenter: function () { console.warn('dansl\'body'); //stuff to do on mouse enter }, mouseleave: function () {

当我的
  • 悬停时,我尝试使用.on()jQuery函数调用一些东西

    当我尝试这样做时:

    $("body").on({
                mouseenter: function () {
                    console.warn('dansl\'body');
                    //stuff to do on mouse enter
                },
                mouseleave: function () {
                    console.warn('sorti');
                    //stuff to do on mouse leave
                }
    });
    
    当我的身体悬停时,我会收到信息。但当我试着用“李”来代替“身体”时,它就不起作用了。如何将.on()应用于一组

  • PS:My
  • 是在文档加载后生成的。

    您需要事件委派才能将事件附加到动态添加的dom:

    更新:
    .hover()
    不能与
    .on()
    一起使用。您可以改为使用:

    $("body").on({
    mouseenter: function () {
        console.warn('dansl\'body');
        //stuff to do on mouse enter
    },
    mouseleave: function () {
        console.warn('sorti');
        //stuff to do on mouse leave
    }
    }, "li"); //pass the element as an argument to .on
    
    试试这个:

    $(document).on("mouseenter", "li", function() {
        // cause some mayhem here
    }).on("mouseleave", "li", function() {
        // use this to restore order
    });
    

    发生的情况是,事件在元素存在之前就被绑定,因此它们不会接收事件。当您像这样在文档上绑定它时,它将出现在与选择器匹配的所有元素中,即使是动态创建的元素。

    为了总结此处提供的所有解决方案,由于您的目标元素是动态加载的,因此您最好在创建元素后使用,而不是绑定事件

    对于单个事件,方法上的
    的第二个参数用作目标元素的选择器:

    $('ul').on('click', 'li', function() {
        // "dynamic" <li> element is clicked
    });
    
    $('ul')。在('click','li',function()上{
    //单击“动态”元素
    });
    
    对于多个事件,可以使用以下方法:

    $('ul').on({
        mouseenter: function() {
            // <li> receives 'mouseenter'
        },
        mouseleave: function() {
            // <li> receives 'mouseleave'
        }
    }, 'li');
    
    $('ul')。在({
    mouseenter:function(){
    //
  • 收到“mouseenter” }, mouseleave:function(){ //
  • 收到“mouseleave” } }"李",;
  • 为了使代码运行更快,您应该将事件绑定到目标元素最近的静态父元素


    演示:

    是将.on代码包装在文档就绪块中?还是动态添加了
    li
    元素?您需要使用.on代码不是包装在就绪块中。而且,正如我在帖子中所说,li是在之后生成的,动态添加yes。我建议查找最接近的
  • 静态父元素,使代码运行更快。它不起作用。。。没有错误,没有。两个问题:1)
    hover
    映射到
    mouseenter
    mouseleave
    ,而不是
    mouseover
    mouseout
    ,2)。@FrédéricHamidi:谢谢……我真的不知道。好的,谢谢。正如大家所说,也许你应该在你的帖子中用
    ul
    替换
    body
    。用于访问直接父级。对于未来的用户,他们可能会有同样的问题。这是可行的,但您可能应该使用更接近
    li
    的父级,而不是
    document
    Perfect!这是工作!非常感谢。没有理由将单个事件拆分为对
    .on()
    的单独调用;该函数支持以键/值对的形式传递带有事件/处理程序的对象,以及用于委托的选择器。换句话说,对问题中代码的唯一更改应该是在
    .on()
    调用中添加“li”,以及调用它的更具体的选择器(静态
    元素)。尽管Sam Creamer有一点,绑定到li的最直接父元素更合适,执行速度更快。然而,我很懒,并且倾向于使用文档来处理所有事情。这是“坏”的做法,但并不可怕。我不能接受你的答案作为解决办法。你只是复制粘贴了别人的回答。附言:否决票不是我投的…@Superdrac不是真的。这个解决方案并不是唯一的,因为这个问题相当琐碎,在StackOverflow上被问了数百次。此外,我总结了有关活动授权的所有事实,并通过演示提出了可行的解决方案,与周围提供的错误或过度解决方案形成对比。