为什么不是';我的悬停事件是否在JQuery中触发?
我不知道为什么我的活动没有启动?我只想在用户将鼠标悬停在li上时更改列表样式类型。看起来我没有遗漏什么,但什么都没有发生为什么不是';我的悬停事件是否在JQuery中触发?,jquery,Jquery,我不知道为什么我的活动没有启动?我只想在用户将鼠标悬停在li上时更改列表样式类型。看起来我没有遗漏什么,但什么都没有发生 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<link href="theme.css" rel="stylesheet" type="text/css" />
</head>
<script type="text/javascript">
$(".component ol li").hover(function() {
$(this).css('list-style-type', 'disc');
}
);
</script>
<body>
<form id="form1" runat="server">
<div class="component">
<ol>
<li><a href="#"></a> </li>
<li><a href="#"></a> </li>
<li><a href="#"></a> </li>
<li><a href="#"></a> </li>
<li><a href="#"></a> </li>
</ol>
</div>
</form>
</body>
</html>
$(“.component ol li”).hover(函数(){
$(this.css('list-style-type','disc');
}
);
现在,只要在DOM中添加了与
$(“.component ol li”)
匹配的内容,就会附加悬停函数。这样编写javascript后,悬停函数就会工作
$(function(){
$(".component ol li").hover(function() {
$(this).css('list-style-type', 'disc');
}
);
})
因为您正在选择尚未存在的元素 这将在元素存在之前执行(这不起作用)
这将在渲染元素后执行(此操作有效)
如果您想将脚本放在最上面,您有两个选择:
- 使用
:在DOMready上添加一个事件,这意味着当所有元素都加载时函数将启动$(function(){})
- 使用
:这将在窗口上添加一个检查目标的事件,这意味着即使在加载页面后,它也将处理添加的任何元素$().live()
也许您应该向我们展示它。您可以使用$.delegate方法创建mouseenter和mouseleave事件处理程序来管理悬停效果。我知道您没有在代码中定义悬停处理程序,但下面是使用委托的方法,只要元素与选择器匹配,委托就会起作用:
$(".component ol").delegate("li", "mouseenter", function(e) {
$(this).css('list-style-type', 'disc');
});
$(".component ol").delegate("li", "mouseleave", function(e) {
$(this).css('list-style-type', 'circle');
});
首先,我建议使用
$(document).ready(function(){
//your code here
});
这应该能解决你的问题
除此之外,为了进一步提高性能,您可以将事件绑定到顶级元素,例如UL,而不是每个LI。这也将帮助您获得更好的性能。由于您使用的是jQuery1.4.2,因此可以很容易地使用jQueryDelegate来实现这一点
请随时澄清任何疑问
谢谢,普拉纳夫考希克
我不喜欢
document.ready
,如果您的页面挂起以加载某些内容,则脚本运行将需要一段时间。与StackOverflow收件箱
一样,它使用的是文档就绪
,如果页面延迟了一点,您单击图标,则会被重定向,而不是显示弹出窗口。现在看来已经修好了。嗯,我同意。但这似乎是一个简单的页面,它不会对无数不同的服务器进行无数次调用。否则,使用从document.ready中删除块的第二个选项,并将脚本块放在列表项的右键位置之后。这是不正确的。您首先应该将脚本放在页面的底部,这意味着当应用悬停的DOM元素时,它们将存在。读了戴夫·沃德几周前写的文章,我对我所说的不真实感到困惑?关于无数的电话?关于在创建dom对象后放置脚本?我的意思是,这篇文章中唯一没有提到的是使用.live()
。哦,现在我意识到。。。JSFIDLE是否自动添加$(document).ready(function(){…})
:s
<script></script>
<ul></ul>
<ul></ul>
<script></script>
$(".component ol").delegate("li", "mouseenter", function(e) {
$(this).css('list-style-type', 'disc');
});
$(".component ol").delegate("li", "mouseleave", function(e) {
$(this).css('list-style-type', 'circle');
});
$(document).ready(function(){
//your code here
});