1

谁能看到我可能在哪里犯错?表单文本框背景颜色最初设置为灰色。如果用户犯了错误,我想用红色边框将它们变成黄色。该功能有点工作,因为当表格填写不正确时,表格不会发送到服务器。但是css没有改变。如果我注释掉我的 js 调用,它将发布到服务器。以下是片段:

CSS:

  .invalid{
background-color:#ff9;
border: 2px red inset;
}

   .reqd{
background-color:#222222; 
color:#555555; border-style: solid; 
border-color:#555555; 
border-width: 1px;
 }

HTML:

<!DOCTYPE html>
  <?php 
  // Debug
   error_reporting(E_ALL);
  ?>

<html lang="en">
 <head>
<meta charset="utf-8">
<link rel="stylesheet" href="styles.css" type="text/css">
<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/regauth.js"></script>

    <title></title>
 </head>
 <body id="registerBody">
<section id="registerBox">

    <form id="registerForm" method="post" action="regauth.php">
    <p>Welcome to the atlas registraton! Please fill out the information below.</p>
    <br>
    <p><label for="firstName">First Name:&nbsp;&nbsp;<input type="text" size="30" id="firstName" name="firstName" class="reqd"></label></p>
    <p><label for="lastName">Last Name:&nbsp;&nbsp;<input type="text" size="30" id="lastName" name="lastName" class="reqd"></label></p>
    <p><label for="email">Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" size="30" id="email" name="email" class="reqd"></label></p>
    <br>
    <br>
    <p><label for="reqUsername">Username:&nbsp;&nbsp;<input type="text" size="30" id="reqUsername" name="reqUsername" class="reqd"></label></p>
    <p><label for="passOne">Password:&nbsp;&nbsp;<input type="password" size="30" id="passOne" name="passOne" class="reqd"></label></p>
    <p><label for="passTwo">Confirm Password:&nbsp;&nbsp;<input type="password" size="30" id="passTwo" name="passTwo" class="reqd"></label></p>
    <br>
    <br>
    <p><input type="submit" value="Submit">&nbsp;&nbsp;<input type="reset" value="Reset Form" class="reset"></p>

    </form> 
</section>
<script type="text/javascript">
$("#registerBox").css("margin-left", ($(window).width()-425)/2);
$("#registerBox").css("margin-top", ($(document).height()-500)/2);
$('#registerBox').fadeIn(1500);
</script>

   </body>

    </html>

JS (regauth.js): 由 Tom Negrino 提供,视觉快速入门指南:Javascript 第八版

window.onload = initForms;

//Function loops through each form. For each one it adds an event handler to that forms 'onSubmit'.
function initForms() {
for (var i = 0; i < document.forms.length; i++) {
    document.forms[i].onsubmit = validForm;
     }
   }

function validForm() {
var allGood = true;
var allTags = document.getElementsByTagName("*");

for (var i = 0; i < allTags.length; i++) {
    if (!validTag(allTags[i])) {
        allGood = false;
    }
}
return allGood;

function validTag(thisTag) {
    var outClass = "";
    var allClasses = thisTag.className.split(" ");

    for (var j = 0; j < allClasses.length; j++) {
        outClass += validBasedOnClass(allClasses[j]) + " ";
    }
    thisTag.className = outClass;

    if (outClass.indexOf("invalid") > -1) {
        thisTag.focus();
        if (thisTag.nodeName == "INPUT") {
            thisTag.select();
        }
        return false;
    }
    return true;

    function validBasedOnClass(thisClass) {
        var classBack = "";

        switch (thisClass) {
            case "":
            case "invalid":
                break;
            case "reqd":
                if (allGood && thisTag.value == "") {
                    classBack = "invalid ";
                }
                classBack += thisClass;
                break;
            default:
                classBack += thisClass;
        }
        return classBack;
    }
}

}

4

1 回答 1

0

将“无效”CSS 块移到“reqd”块之后。

CSS 的规则是“最后一条规则获胜”(有点;它更复杂,但在这种情况下,这就是问题所在)。

即使“无效”规则适用于无效元素,因为“reqd”规则具有背景颜色并且因为它位于“无效”规则之后,所以该设置也适用。

于 2012-06-30T20:51:16.823 回答