你如何使用:焦点如果你也用Javascript设置属性?

时间:2013-06-20 21:23:40

标签: javascript jquery css

如果你要设计一个< input>使用Javascript的元素,看起来您以这种方式设置的任何属性都会在:焦点规则中被忽略。

我有example说明了这一点:

  • 最初输入元素的背景和边框设置与周围元素(div.header)相同
  • 点击[open]链接打开div.body元素,该元素最初未显示。
  • 我想明确标题是文本字段,因此请更改输入的背景和边框以匹配刚刚显示的文本区域。

我有一个:textarea和输入的焦点规则,为背景黄色着色,因此很明显文本字段具有焦点。

但这对输入元素不起作用,似乎是因为我以编程方式设置了这些属性。如果我没有设置它们,那么:焦点按预期工作。如果:焦点规则设置的属性未在.css()中设置,那么它们就会受到尊重。

在Safari,Firefox,Chrome和IE上都是如此,所以很明显是“预期行为”,但我在网上找不到任何说明(为什么)这是正确的。

显然我可以实现我想要的using blur and focus handlers,但我试图理解为什么会这样。

2 个答案:

答案 0 :(得分:3)

如果直接设置元素的样式,那么与使用HTML style 属性相同。它来自the cascade中的任何选择器。

通常,为了处理CSS与JavaScript的良好变化,您需要提前准备样式表(作为正确的样式表),然后更改元素以匹配新的选择器(通常通过修改其类列表)。

或者,您可以修改the stylesheet itself with JavaScript

答案 1 :(得分:2)

这与特异性有关,it is documentedW3C有关,特别是

  

特异性有四个组成部分;我们称他们为a,b,c和d。组分“a”是最有区别的,“d”是最小的。

     
      
  • 组件“a”非常简单:样式属性中的声明为1,否则为0。
  •   

由于.css直接更新style属性,因此它的特异性高于样式表中的任何内容。您可以使用!important去提供更高的重要性(其优先级高于特异性),但更好的选择是使用类(.addClass)而不是改变样式属性直接。