更新 我想我很快就假设了 voodoo jquery 的神秘。我注意到我确实使用了两次“用户名”ID,这就是问题所在。第二个用户名id是通过从php注入页面的html代码添加到页面的,所以我一开始在源代码中看不到它。
我正在编写这个客户端验证 jquery 代码:
username = $("#username").val();
if (username.length < 5 || username.length > 15 || !username_regex.test(username)) {
error += "invalid username\n";
$(this).find("label[for='username']").css("color", "red");
$("#username").css("background-color", "#ffc9c9").css("border-color", "red"); //this doesn't work
// $("input[id='username']").css("background-color", "#ffc9c9").css("border-color", "red"); //this works
}
和html:
<p><label for="username">Username</label><input id="username" type="text" name="username"/></p>
我还有几个 jquery/html 块,与上面的完全相同,用于密码、电子邮件、名字等。
此验证代码是 onsubmit 处理程序的一部分,所有其他块都工作正常:当一个字段不符合验证条件时,它的标签颜色变为红色,其输入字段的背景颜色变为 #ffc9c9。
问题出在用户名上——它的标签确实变成了红色,但它的输入字段没有变成#ffc9c9。我没有看到它不起作用的任何理由,我使用同一行:
$("#*input_field_id*").css("background-color", "#ffc9c9").css("border-color", "red");
对于每个其他块,它对他们来说都很好。
还可以看到注释行:
$("input[id='username']").css("background-color", "#ffc9c9").css("border-color", "red");
确实有效并解决了我的需求。但它并没有解决这个谜团,我试图弄清楚为什么上面的行不起作用。另请注意,我已经使用 firebug 进行了调试并得到了预期的结果,例如:
$("#username").attr("name"); // = username, as expected
归结为:为什么$("input[id='username']")
当我尝试更改它的 css 但$("#username")
不会起作用时?