我有一个表单,其中包含一些输入字段,每个输入的右侧都有一个带有少量描述的<div>
。我想要的是为每个输入自己的<div>
启用一个 CSS 类,并带有它自己的描述。
我在这里举了一个工作的例子:http://jsfiddle.net/VL2FH/8/。这将在输入的焦点状态上使用<div>
:悬停状态。
我想问的是:有没有某种"捷径",这样我就不必做:
$('#submit_name').bind('blur', function(){
$('#submit_name-desc').removeClass('input-desc-hover').addClass('input-desc');
});
$('#submit_name').bind('focus', function(){
$('#submit_name-desc').removeClass('input-desc').addClass('input-desc-hover');
});
对于表单中的每个输入字段。
你可以像这样概括focus and blur
回调
$('input').on('blur', function(){
$(this).next('div').removeClass('input-desc-hover').addClass('input-desc');
}).on('focus', function(){
$(this).next('div').removeClass('input-desc').addClass('input-desc-hover');
});
如果您的描述divs
位于输入元素旁边,它将正常工作。
最好使用 .on()
进行事件绑定。
演示:http://jsfiddle.net/joycse06/VL2FH/11/
您也可以仅在 CSS 中使用相邻的同级选择器+
来实现相同的效果,以便直接跟随焦点输入的任何.input-desc
都将应用不同的规则:
input:focus + .input-desc {
cursor: default;
width: 265px;
-moz-box-shadow: 0px 2px 5px #aaaaaa;
-webkit-box-shadow: 0px 2px 5px #aaaaaa;
box-shadow: 0px 2px 5px #aaaaaa;
animation:desc 0.3s;
-moz-animation:desc 0.3s; /* Firefox */
-webkit-animation:desc 0.3s; /* Safari and Chrome */
}
相邻的同级选择器支持现代浏览器和版本 8 的 Internet Explorer。( http://reference.sitepoint.com/css/adjacentsiblingselector )
这里有一个小提琴:http://jsfiddle.net/VL2FH/14/
查看这个波纹管示例程序
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$('#submit_name').bind('blur', function()
{
$('#submit_name-desc').removeClass('cls1').addClass('cls2');
});
$('#submit_name').bind('focus', function()
{
$('#submit_name-desc').removeClass('cls2').addClass('cls1');
});
});
</script>
<style>
.cls1
{
background-color: #ccc;
}
.cls2
{
background-color: #fff;
}
.submit_name-desc
{
height: 30px;
border: 1px;
}
</style>
</head>
<body>
<input type="text" id="submit_name" />
<div id="submit_name-desc">
Name Description
</div>
</body>
</html>
使用类而不是 id 来选择元素。如果你的输入元素有submit-name
类,你的描述desc
类,你可以这样做:
$('.submit-name').bind('blur', function(){
$("~ .desc", this).first().removeClass('input-desc-hover').addClass('input-desc');
}).bind('focus', function(){
$("~ .desc", this).first().removeClass('input-desc').addClass('input-desc-hover');
});
$("~ .desc", this).first()
将选择输入元素(this
)的第一个同级,并带有类desc
。
这是更新的jsFiddle:http://jsfiddle.net/miroslav/VL2FH/13/
编辑
不过,乔伊对$(this).next()
的解决方案要好得多。