【发布时间】:2018-03-01 15:02:56
【问题描述】:
我有一个带有一些输入的表单和一个附加到它们的 CSS,它使用属性值选择器根据值更改输入的背景颜色。
例子
<!DOCTYPE html>
<html>
<head><style>
input[value="foo"] { background-color: red; }
</style></head>
<body>
<form>
<input value="foo" />
<button/>
</form>
</body>
</html>
如果我在加载时使用foo 作为值,如代码中所示,加载时该字段将是红色的,但如果我更改它,它将保持红色。如果我将输入的值更改为foo,同样的事情,它不会改变背景颜色。
如果我在 jQuery 中使用 .val() 也是如此。显然,在这些情况下,“动态”值发生了变化,而 CSS 指的是“静态”值。
$('button').on('click', function(ev) {
ev.preventDefault();
$('input[value="foo"]').val('bar');
// $('input[value="bar"]').val('baz'); // nothing is found
});
我希望这段代码将字段从foo 更改为bar,然后将bar 更改为baz,但在第二个选择器中找不到该字段。
如果我使用 attr 方法,一切似乎都有效,但在 jQuery 文档(以及这里的许多答案)中,val 是可行的方法。
为什么会这样,我为什么要使用val()?
【问题讨论】:
-
This 应该会有所帮助。基本上,你已经尝试过使用
.filter或.attr。 -
在我的回答中,我试图解释你的基本误解。
-
实际问题的细节是什么?颜色变化是否完全基于值是否已从其原始属性更新?
-
@doodlemeister 实际问题是我想在空输入字段附近添加一个 :pseudo 元素,但由于值选择器的工作方式,我遇到了问题。
标签: javascript jquery html css