首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么$("input[id='username']")工作,而$("#username")不能工作?

为什么$("input[id='username']")工作,而$("#username")不能工作?
EN

Stack Overflow用户
提问于 2013-10-05 10:02:47
回答 3查看 2.6K关注 0票数 3

更新我想我很快就开始相信巫毒jquery的神秘之处了。我注意到我确实两次使用“用户名”Id,这就是问题所在。第二个用户名id是通过从php注入页面的html代码添加到页面中的,所以我一开始无法在源代码中看到它。

我正在编写这个客户端验证jquery代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
  <p><label for="username">Username</label><input id="username" type="text" name="username"/></p>

我还有几个jquery/html块,与上面的完全相同,用于密码、电子邮件、名字等等。

此验证代码是onsubmit处理程序的一部分,其他所有块都正常工作:当某个字段不符合验证标准时,其标签的颜色变为红色,其输入字段的背景色变为#ffc9c9。

问题在于用户名--它的标签确实会变成红色,但是它的输入字段不会变成#ffc9c9。我看不出有什么不起作用的理由,我用的是同一句话:

代码语言:javascript
复制
 $("#*input_field_id*").css("background-color", "#ffc9c9").css("border-color", "red");

对于其他的每一个街区,它的工作对他们很好。

还请注意注释行:

代码语言:javascript
复制
$("input[id='username']").css("background-color", "#ffc9c9").css("border-color", "red");

也能解决我的需要。但这并不能解开谜团,我正试图弄明白为什么上面的线不起作用。还请注意,我使用了firebug进行了调试,并获得了预期的结果,例如:

代码语言:javascript
复制
$("#username").attr("name"); // = username, as expected

归结起来是这样的:为什么当我试图改变$("input[id='username']")时,$("#username")会工作,但$("#username")不会?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-05 10:06:19

这是因为ID必须是唯一的,并且ID选择器只选择带有特定ID的第一个元素,所以应该使用类。您将通过使用.getElementById()对象的document方法获得相同的结果,这是预期的行为。属性选择器以不同的方式工作。

票数 2
EN

Stack Overflow用户

发布于 2013-10-05 10:07:52

尝试如下:

代码语言:javascript
复制
$("#username").css({'background-color': "#ffc9c9",'border-color': "red"});   
票数 0
EN

Stack Overflow用户

发布于 2013-10-05 10:16:36

这个小提琴显示#用户名有效。但是,我不得不删除您为错误赋值的行,因为它似乎失败了。

代码:

代码语言:javascript
复制
 if (username.length < 5 || username.length > 15 || !username_regex.test(username)) {
     $(this).find("label[for='username']").css("color", "red");
     $("#username").css("background-color", "#ffc9c9").css("border-color", "red");
 }

加:

如果在If块之前使用错误字符串,则可以:

代码语言:javascript
复制
 username = 'aaa';
 error = '';
 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");
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19196451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档