我有这个jQuery代码:
$('*').mouseover(function()
{
$('#log').text($(this)[0].tagName);
});
在我的页面中,我有一堆元素,还有一个ID为“log”的DIV。当用户将鼠标移到任何元素上时,我希望他们的元素名称(例如p
或h2
)出现在#log
中。但是每当我抓住任何东西时,它都会返回HTML
。我该如何解决这个问题?
答案 0 :(得分:6)
尝试:
$('*').mouseover(function(evt)
{
$('#log').text($(this)[0].tagName);
evt.stopPropagation();
});
我认为,你的问题是,事件会一直传播到链中,直到它到达<html>
,并且它就会停止。这应该有帮助。
编辑:缩小范围也可能有所帮助,即$('#container > *')
。
答案 1 :(得分:2)
这是因为事件正在冒泡到html
处理它们。
试试这个......
$(document).mouseover(function(event) {
$('#log').text(event.target.tagName);
});
现在您只附加一个事件,让它们全部冒泡到document
处理它们。
答案 2 :(得分:2)
试试这个:
$('*').bind('mouseover', function(e) {
e.stopPropagation();
$('#log').text($(this)[0].tagName);
}
答案 3 :(得分:1)
问题是你的事件正在冒泡到html dom节点......你不想要这个。这将解决它:
$('*').mouseover(function(e){
e.stopPropagation();
$('#log').text(this.tagName);
});
答案 4 :(得分:0)
文档的第一个元素是html标记。所以它将获得第一个悬停命令。查找 - 至少 - 身体元素。
答案 5 :(得分:0)
我创建了一个小提琴来帮助你:http://jsfiddle.net/ErickPetru/NQfZh/
如您所见,我建议您使用mouseenter
insted,然后事件传播不会成为问题。如果您使用mouseover
,鼠标将始终在每个元素及其父元素上触发此事件。
此外,.attr("tagName")
更好,因为您不需要任何[0]
索引。
答案 6 :(得分:-1)
您可以通过选择“*”将此事件处理程序附加到任何 DOM元素。 没有event.stoppropagation()...每个动作都被路由下来(向上!)到html。
尝试
$('*', 'body').mouseover(function()
{
$('#log').text($(this)[0].tagName);
});
将标签检测限制在正文中包含的元素。