jquery <table>中<tr>和<td>谁引发事件? 可能因为你的tr区域完全被td填充,所以e.target是td 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不应该吧,target是非IE浏览器下的事件属性,srcElement是IE下的事件,非IE的浏览器之下是默认执行的捕获事件,当然mouseenter这个应该对兼容已经处理了,你可以看下mouseenter函数的源代码,用封装好的框架,不好说是什么样的事件流~~ 我是这样判断的因为$(e.target).is("tr") 显示为false而$(e.target).is("td") 显示为truemouseenter是jquery封装过的事件,这样判断结果相同e.target.nodeName //tde.srcElement.nodeName //td 你将tr的高度设为200px,td的高度设为100px再看看? 一样的,是不是td,tr有特殊的地方。 是一样的。可能是由于tr一定会被td填充。所以这种方法测试没用你在某个td中加入个div就知道了。你可以得到e.target=div的提示table这种方法不好测试,用div粗糙的做个小例子,你可以看到从外到内的层级,移动时从外围的div,ul,li的顺序都可以得到,由此可知,这种事件应该不会冒泡<script> $(".test").mouseover( function(e){ alert(e.target.nodeName) });})</script><style type="text/css">.test{float:left;width:500px;height:300px;border:1px solid #bfbfbf;}.test ul{ list-style:none; float:left;width:200px;height:150px;border:1px solid #bfbfbf;}.test ul li{ list-style:none;width:100px;height:80px;border:1px solid #ff9900;margin:30px;}</style><div class="test"><ul> <li>asdfasfd</li></ul></div> 我也用div套div试过了,完全符合预期。碰到table就乱了,所以怀疑tr,td有特殊的地方,因为tr都被td填充了,怀疑事件到底是tr引发的还是td引发的,改成$("td").mouseenter( function(e){}); e.target仍然是td,如果是tr引发绑定到td上的函数就不该执行,如果是td引发绑定到tr上的函数就不该执行。也许该看jquery的源码,谁看过源码能解释。 如果把一个tr中的td全部去掉,只是写一些东西在tr里面,那么alert(e.target.nodeName),这句话弹出的为空,这个是什么情况?难道tr不算是一个HTML元素,不可能吧,期待大神的解释~~~ 建议楼主去看看这篇文章http://nuysoft.iteye.com/blog/1198058看完你就懂了 呵呵,你要是在给tr绑定事件以外,再单独给td绑定个同样的事件,但return false,估计就不会了比如:$("table tr td").mouseover( function(e){ return false;});这样看来,还是冒泡了的意思呀 这个我也试过,td的mouseover事件中阻止冒泡,tr的mouseenter事件也不执行,同样mouseout对mouseleave。这两组事件到底有什么关系? 将mouseenter修正为mouseover,mouseleave修正为mouseout 什么意思,还没看懂原代码。 只是jquery的事件而已mouseenter将只在进入的第一次生效,不像onmouseover一样,移来移去的还能触发 用onMouseEnter、onMouseLeave来代替onMouseOver、onMouseOut,他们的作用基本相同,前者不会发生冒泡。 看看这篇啊有帮助http://techbbs.zol.com.cn/1/9_1913.html### 求js模拟alert()方法的阻塞功能 EXTJS中如何给选项卡内创建grid万分感激! getElementById问题,简单代码 高分求:生成html的方法 帮忙看看 散分,无聊,郁闷, 如何获得上一页跳转地址? 正则验证 正则验证 正则验证 正则验证 正则验证 正则验证 正则验证 100%结贴 请高手写段弹层JS效果 急~ sct的问题 有分析过jquery源码的同鞋帮下忙 easyui的combobox示例代码,从VS调试,结果不正确,为什么?
因为$(e.target).is("tr") 显示为false
而$(e.target).is("td") 显示为true
mouseenter是jquery封装过的事件,
这样判断结果相同
e.target.nodeName //td
e.srcElement.nodeName //td
你在某个td中加入个div就知道了。你可以得到e.target=div的提示table这种方法不好测试,用div粗糙的做个小例子,你可以看到从外到内的层级,移动时从外围的div,ul,li的顺序都可以得到,由此可知,这种事件应该不会冒泡
<script>
$(".test").mouseover( function(e){
alert(e.target.nodeName)
});
})
</script>
<style type="text/css">
.test{float:left;width:500px;height:300px;border:1px solid #bfbfbf;}
.test ul{ list-style:none; float:left;width:200px;height:150px;border:1px solid #bfbfbf;}
.test ul li{ list-style:none;width:100px;height:80px;border:1px solid #ff9900;margin:30px;}
</style>
<div class="test">
<ul>
<li>asdfasfd</li>
</ul>
</div>
也许该看jquery的源码,谁看过源码能解释。
比如:
$("table tr td").mouseover( function(e){
return false;
});这样看来,还是冒泡了的意思呀
mouseenter将只在进入的第一次生效,不像onmouseover一样,移来移去的还能触发
http://techbbs.zol.com.cn/1/9_1913.html###