2011-05-30 81 views
3

在下面的代码中,我试图使其在选择(聚焦)输入时,关联字段集中的“formhead”div更改其背景色,并在模糊时改回。我想通过在焦点上添加一个类到同一个div来完成此操作,并在模糊时删除该类。最接近的jQuery在概念上与我正在尝试做的最相似,但不合适,因为它只会针对父级div。是否还有其他的东西会针对与该类最近的div,而不影响其他字段集中的其他类?或者我必须要更具体一些,并确定木头等?使用jQuery将类添加到焦点上的组特定div

<fieldset> 
<div class="formhead">Heading Title 1</div> 
<div class="fieldleft"> 
    <label for="specificinput">Input Title</label> 
    <input type="text" class="forminput" id="specificinput"> 
</div> 
<div class="fieldleft"> 
    <label for="specificinput">Input Title</label> 
    <input type="text" class="forminput" id="specificinput"> 
</div> 
</div> 
</fieldset> 

<fieldset> 
<div class="formhead">Heading Title 2</div> 
<div class="fieldleft"> 
    <label for="specificinput">Input Title</label> 
    <input type="text" class="forminput" id="specificinput"> 
</div> 
<div class="fieldleft"> 
    <label for="specificinput">Input Title</label> 
    <input type="text" class="forminput" id="specificinput"> 
</div> 
</div> 
</fieldset> 

而jQuery的:

<script type="text/javascript"> 
$(document).ready(function() { 
    $('input').focus(function(){ 
    $(this).closest('.formhead').addClass('bluebg'); 
    }); 
    $('input').focus(function(){ 
    $(this).closest('.formhead').removeClass('bluebg'); 
    }); 
}); 
</script> 

回答

5

你可以输入的.formhead这一行:

$(this).closest('fieldset').find('.formhead').addClass('bluebg'); 

你也可以写为(实际上是相同的,使用上下文):

$('.formhead', $(this).closest('fieldset')).addClass('bluebg'); 

我看到你的代码最简单的方法是这样的:

$('input.forminput').bind('focus blur', function() { 
    $(this).closest('fieldset').find('.formhead').toggleClass('bluebg'); 
}); 

jsFiddle Demo

这将分配相同的处理程序onfocusonblur,这将只需拨动类的.formhead

+1

这工作就像一个魅力,美丽的解决方案 – hisnameisjimmy 2011-05-30 12:37:05

+1

谢谢,就是我在找什么。 – bard 2015-11-17 10:03:28

-1

可以使用.next()

+0

'.next()'在这里会有帮助吗? – kapa 2011-05-30 12:43:26

1

您也可以在父<div>元素与fieldleft类使用closest()匹配,然后继续使用prevAll()formhead兄弟姐妹:

$(document).ready(function() { 
    $("input:text").bind("focus blur", function() { 
     $(this).closest(".fieldleft").prevAll(".formhead").toggleClass("bluebg"); 
    }); 
}); 
+0

这似乎只适用于紧跟formhead div的输入字段。下面的任何输入都无法定位它,可能是由于prev – hisnameisjimmy 2011-05-30 12:33:57

+0

@hisnameisjimmy的限制,你说得对,必须在这里使用'prevAll()'。回答相应更新,感谢您的领导:) – 2011-05-30 12:37:21