以下代码不起作用。当鼠标悬停在带有class ='row'的div上时,我想要显示子div。我习惯了JavaScript,但我现在只是调整到jQuery。我该如何做到这一点?
<script type="text/javascript">
$(function() {
$('.block').hide();
$('.row').hover(function() {
$('.block').show();
});
});
</script>
<?php
echo "<div class='row'><div class='block'>one</div></div>";
echo "<div class='row'><div class='block'>two</div></div>";
echo "<div class='row'><div class='block'>three</div></div>";
echo "<div class='row'><div class='block'>four</div></div>";
?>
答案 0 :(得分:2)
当任何带有“row”类的元素悬停时,您的代码将显示所有带有“block”类的元素。您需要选择正确的.block
元素:
$(function() {
$('.block').hide();
$('.row').hover(function() {
$(this).find('.block').show();
});
});
这使用.find
方法查找与选择器.block
匹配的所选元素的后代。
我不确定当鼠标离开.row
元素时你打算发生什么,但目前什么都不会发生(事实上,相同的.show
行会再次运行,因为这就是发生的事情当只有一个参数传递给.hover
时。如果您打算再次隐藏.block
元素,则可以向.hover
提供另一个参数:
$(function() {
$('.block').hide();
$('.row').hover(function() {
$(this).find('.block').show();
}, function() {
$(this).find('.block').hide();
});
});
或者,您可以坚持使用单个参数,而是使用.toggle
方法:
$(function() {
$('.block').hide();
$('.row').hover(function() {
$(this).find('.block').toggle();
});
});
答案 1 :(得分:1)
在悬停功能中,您需要找到当前元素的后代,您可以这样做:
$('.row').hover(function () {
$(this).find('.block').show();
});
this
是当前元素(悬停的.row
元素),因此$(this)
会创建一个jQuery对象,因此您可以在其上调用jQuery方法。
答案 2 :(得分:0)
$('.row').hover(function(event) {
if (this == event.currentTarget) {
// run code here
}
答案 3 :(得分:0)
工作示例:http://jsfiddle.net/theom3ga/yPCCn/
您只需使用$(".block", $(this))
答案 4 :(得分:0)
$('.row').hover(function() {
$('.block',$(this)).show();
});
答案 5 :(得分:0)
$('.row').mouseenter( function () {
$('.block', this).show();
$(this).siblings().find('.block').hide();
});
在这种情况下,悬停几乎没有意义,除非您想要完全关闭该块。如果你用鼠标徘徊很远,这种方法可以让最后一行保持打开状态。
但是,如果你想在每次鼠标离开时关闭块:
$('.row').hover(
function () {
$('.block', this).show();
},
function () {
$('.block', this).hide();
});
当然它暗示了你的css中的.block {display: none;}
。
答案 6 :(得分:0)
用户很难对隐藏元素(或非常小的元素)执行鼠标悬停。
将您的代码更改为以下内容:
$(function() {
$('.block').hide(); // hide all .block elements
$('.row').bind('mouseover', function() { // bind a mouseover handler
$(this).find('.block').show();
}).bind('mouseout', function () { // bind a mouseout handler
$(this).find('.block').hide();
});
});
答案 7 :(得分:0)
为什么甚至使用JavaScript?为什么不使用CSS呢? (除非你真的需要支持IE 6及以下版本)
CSS:
.row .block { display: none; }
.row:hover .block { display: block; }
HTML:
<div class='row'><div class='block'>one</div></div>
<div class='row'><div class='block'>two</div></div>
<div class='row'><div class='block'>three</div></div>
<div class='row'><div class='block'>four</div></div>
哦,正如@Ben Everard
所述,不需要echo