jquery悬停在我的列表项上不起作用

Posted

技术标签:

【中文标题】jquery悬停在我的列表项上不起作用【英文标题】:jquery hover not working on my list items 【发布时间】:2011-07-04 12:14:11 【问题描述】:

我要解决一个奇怪的问题,我在使用 ajax 动态生成的列表项中添加了悬停功能,但没有发生任何事情。代码正在执行,没有任何错误,但没有效果。甚至警报也没有显示mouseenter 和 mouseout。警报偶尔会弹出一次,但不是每次都弹出。我正在使用以下代码。

$('.category_list li').live("mouseenter", function()  
alert('I m here');
  $(this).find('.category_list').css('text-decoration','underline');
).live("mouseleave", function() 
alert('I m gone');
  $(this).find('.category_list').css('text-decoration','none');
); 

我的html代码是

htmlData.push('<ul class="category_list">');
htmlData.push('<li><a href="javascript:void(0);" onclick="callGetApplicationDetails('+iIndex+',0);" >'+categoryName+'</a></li>');

请帮帮我,因为我被困得很厉害。

谢谢 赫米什

【问题讨论】:

【参考方案1】:

尝试使用mouseovermouseout 事件。我相信您的过滤选择器正在寻找 &lt;li&gt; 元素父级?

$('.category_list li').live('mouseover mouseout', function(event) 
    if (event.type == 'mouseover') 
        alert('I m here');
        $(this).parent().css('text-decoration','underline');
     else 
        alert('I m gone');
        $(this).parent().css('text-decoration','none');
    
);

你可以用一个新的 css 类稍微清理一下 jQuery

.category_list.over

    text-decoration: underline;

并使用toggleClass()

$('.category_list li').live('mouseover mouseout', function(event) 
    if (event.type == 'mouseover')  alert('I m here');  
    else  alert('I m gone'); 

    $(this).parent().toggleClass('over');
);

【讨论】:

感谢您的回复。现在使用此代码,即使我不在类别列表 li 上,我也会每次都收到警报('我走了')。即使我将鼠标移动到其他地方,我也会收到此警报。你能帮我解决这个问题吗?谢谢 请记住,mouseover/mouseout 事件会冒泡。 OP 使用mouseenter/mouseleave 是正确的。【参考方案2】:

如果您不需要通过此功能支持 IE6,请改用 CSS:

示例: http://jsfiddle.net/QLsQp/

.category_list li a 
    text-decoration:none;


.category_list li:hover a 
    text-decoration:underline;

li 悬停时,这使用:hover 伪选择器来影响嵌套的a 元素。


你的 javascript 的问题在于:

$(this).find('.category_list')

...找不到任何东西,因为.category_list&lt;li&gt; 元素的祖先,而不是后代

你会需要这个:

$(this).find('a')

【讨论】:

HiPatrick。我使用了这段代码,但仍然无法获得任何警报。 $('.category_list li ').live("mouseenter", function() alert('我在这里'); $(this).find('a').css('text-decoration','underline '); ).live("mouseleave", function() alert('我走了'); $(this).find('a').css('text-decoration','none'); );请你给点光好吗.. @user:您能否在您的问题中发布实际的 HTML 标记。渲染后,您应该能够使用开发人员工具复制和粘贴它。您的代码应该可以工作。 Here's an example using your code. @Patrick。它适用于 html 开发。工具,但不在我的 Mozilla 和 Internet 浏览器上。我错在哪里? @它的容器 div 可以阻止它或过滤它吗? @user:是的。因为您使用的是.live(),所以事件处理程序实际上放在document 上,并等待事件冒泡,如果导致事件的元素与'.category_list li' 选择器匹配,它就会触发。所以任何防止事件冒泡的东西都会导致事件永远不会到达document。防止冒泡的唯一方法是在容器(或li 元素的其他祖先)上有一个处理程序,该处理程序执行return false;event.stopPropagation()。那些会扼杀冒泡,事件永远不会到达.live()【参考方案3】:

终于!我使用了livequery,它奏效了!

$('.category_list li').livequery("mouseenter", function() 
    $(this).css('background-color' : '#A9A8A8')
).livequery("mouseleave", function() 
    $(this).css('background-color' : '#F4F4F4')
);

@Patrick:感谢您的帮助。

希望它也能帮助其他人。

【讨论】:

以上是关于jquery悬停在我的列表项上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jquery .animate 在我的网站上不起作用

悬停在css菜单活动li类上不起作用?对他人有效?

JQuery 匹配高度在 Rails 5.2 上不起作用

悬停在div上不起作用

元素未显示并且:悬停在.svg上不起作用[重复]

要求属性在移动设备上不起作用