函数看不到新添加的类

function not seeing newly added classes

本文关键字:添加 看不到 新添加 函数      更新时间:2023-09-26

我有一个导航,可以在鼠标悬停时淡入和淡出文本颜色。这是基于非活动类的。

除了最初处于活动状态的页面之外,它可以正常工作。

当我改变页面时(通过ajax),我将"非活动"类添加到以前"活动"的元素,但我的函数没有注意到它。我可以在web检查器中看到活动类被删除,非活动类被正确添加。有什么建议吗?

('header#primary nav a.inactive').hover(
    function(){
        $(this).stop().animate({'color': '#ffffff'}, 'slow');
    },
    function() {
        $(this).stop().animate({'color': '#a2a2a2'}, 'slow');
    });

需要使用jquery的live函数动态添加元素

 $('header#primary nav a.inactive').live('mouseenter' ,function(){
            $(this).stop().animate({'color': '#ffffff'}, 'slow');
        }).live('mouseleave',
        function() {
            $(this).stop().animate({'color': '#a2a2a2'}, 'slow');
        });
http://api.jquery.com/live/

简短的回答:使用。live()或。delegate()函数代替。jQuery文档给出了它们是如何工作的解释,唯一的问题是你需要做一个mouseenter()mouseleave()的组合,而不是快捷的hover()方法。

中回答:

当你直接基于jQuery选择器分配事件处理程序(无论是悬停,点击,等等)时,就像你的代码:

$('header#primary nav a.inactive').hover( /* your code */ );

那说"找到所有匹配选择器的DOM元素,此时并为它们分配一个事件处理程序(hover)"。它肯定不会注意元素在将来什么时候可能被改变以匹配选择器,也不会从元素中删除处理程序,如果它们被改变到不再匹配。

你应该使用。live()或。delegate(),它们将处理当前或将来匹配选择器的元素的事件。

长回答:哎呀,我没有时间写这个,你真的不需要我解释。live()和。delegate()是如何在jQuery文档中介绍的。