Javascript 这个方法有什么作用?
脚本:Javascript 这个方法有什么作用?,javascript,css,forms,Javascript,Css,Forms,脚本: window.onload = initForms; function initForms() { for (var i=0; i< document.forms.length; i++) { document.forms[i].onsubmit = function() {return validForm();} } } function validForm() { var allGood = true; var allTags = document.getEleme
window.onload = initForms;
function initForms() {
for (var i=0; i< document.forms.length; i++) {
document.forms[i].onsubmit = function() {return 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;
}
}
}
css文件:
body {
color: #000;
background-color: #FFF;
}
input.invalid {
background-color: #FF9;
border: 2px red inset;
}
label.invalid {
color: #F00;
font-weight: bold;
}
select {
margin-left: 80px;
}
input {
margin-left: 30px;
}
input+select, input+input {
margin-left: 20px;
}
如果设置了
reqd
类,如果指定的控件为空,validBasedOnClass
函数将返回类名invalid
。在本例中,该类被添加到控件中。
如果添加了类invalid
,控件也会获得焦点
因此,它基本上是一个表单验证器,确保在发布表单之前,应该填写所有带有类reqd
的输入
但是如果你显然不知道代码的作用,那么你从哪里得到的代码呢?它似乎也是非常非结构化的代码。我不会用它。- 在上面的代码中,validTag(thisTag)函数的作用是什么李>
validTag
功能检查所有reqd
标签是否有效(如果标签为空,则标签无效)
- 什么是无效标识符李>
无效不是标识符,它是在
validBasedOnClass
函数中设置的类名(如果标记无效则设置)。(设置它的行是:classBack=“invalid”
)仔细阅读注释
function validTag(thisTag) {
var outClass = "";
var allClasses = thisTag.className.split(" ");
/* <Array> allClasses = a list of all separate class names of `thisTag`*/
/* This loop walks through all elements of the `allClasses` array, and
* calls the `validBasedOnClasses` function (defined below). The return
* value of the function is added to `outClass`, together with a space " "*/
for (var j=0; j<allClasses.length; j++) {
outClass += validBasedOnClass(allClasses[j]) + " ";
}
/*The class attribute of the element is set to the string `outClass`*/
thisTag.className = outClass;
/*Can the string "invalid" be found in the `outClass` string? */
if (outClass.indexOf("invalid") > -1) {
thisTag.focus();/* Puts the user focus to the element*/
if (thisTag.nodeName == "INPUT") {
/* Selects everything in the input, so that the user can easily
* overwrite the contents of the input field*/
thisTag.select();
}
return false; /*Invalid, return FALSE*/
}
return true; /*Valid, return TRUE*/
/* <function> validBasedOnClass - a function used above
* This function accepts a parameter, which equals one of the class names
* of the element */
function validBasedOnClass(thisClass) {
var classBack = ""; /* <string> classBack. This string will be returned*/
switch(thisClass) {
case "": /* An empty class name - Nothing to check*/
case "invalid": /* "invalid" - Remove this class, so that the
* code can validate again (when the "reqd" class
* is encountered) */
break;
case "reqd": /* class name == "reqd" */
/* <boolean> `allGood` is defined at the main function.
* This function will only mark the FIRST invalid input field
* as defined in this function, and the main function */
if (allGood && thisTag.value == "") {
classBack = "invalid "; /*Return class "invalid"*/
}
classBack += thisClass;
/* `classBack` now holds "invalid reqd" or "reqd" */
break;
default:
classBack += thisClass; /* Unknown class, ignore it */
}
return classBack; //Return the (altered) class
}
}
您的代码将验证元素,并将焦点放在第一个无效的元素上 当用户提交表单并且其中一个字段无效时,
invalid
类可能是通过javascript添加的?@MrMisterMan该类是在他发布的javascript中添加的。从编写这部分脚本的人那里获取答案@AmGates我想她不会回答我!无法想象为什么不…这个类是在css文件@GolezTrol中声明的。请详细说明发生了什么。只要调用函数validTag
,我就搞砸了。我想是的。但是好的。IfvalidTag
拆分元素的类以获得所有单独的类。它为该元素的每个类调用validBasedOnClass
。如果类是reqd
,它将检查该值是否为空。如果是,它将返回一个包含无效
的字符串,然后在元素中设置该字符串。因此,如果所有空输入都有类reqd
,那么它们会得到这个无效类。但正如你所说,你会搞砸,我也是。这段代码杂乱无章。还有更好的选择,比如我提到的JQuery库。@GolezTrol在阅读教程时,如果您想知道,thisTag.className
实际上获取了thisTag的attibuteclass
class
是一个保留字,这就是为什么在JavaScript中该属性被称为className
代码>此语句?函数的验证功能严重依赖类
属性作为存储通道。例如:class=“foo bar requd doo”
。当输入字段无效时,类将更改为“foo bar reqd invalid”
。使用thisTag.className=outClass保存此更改代码>。我的意思是这句话需要什么?它有什么作用?然后…在这个脚本中,默认的case什么时候起作用?该语句正在用新的、可能已更改的类名字符串覆盖旧的class
变量。“默认情况”意味着什么?我的意思是我没有看到默认情况应该起作用的情况。你看到了吗?
function validTag(thisTag) {
var outClass = "";
var allClasses = thisTag.className.split(" ");
/* <Array> allClasses = a list of all separate class names of `thisTag`*/
/* This loop walks through all elements of the `allClasses` array, and
* calls the `validBasedOnClasses` function (defined below). The return
* value of the function is added to `outClass`, together with a space " "*/
for (var j=0; j<allClasses.length; j++) {
outClass += validBasedOnClass(allClasses[j]) + " ";
}
/*The class attribute of the element is set to the string `outClass`*/
thisTag.className = outClass;
/*Can the string "invalid" be found in the `outClass` string? */
if (outClass.indexOf("invalid") > -1) {
thisTag.focus();/* Puts the user focus to the element*/
if (thisTag.nodeName == "INPUT") {
/* Selects everything in the input, so that the user can easily
* overwrite the contents of the input field*/
thisTag.select();
}
return false; /*Invalid, return FALSE*/
}
return true; /*Valid, return TRUE*/
/* <function> validBasedOnClass - a function used above
* This function accepts a parameter, which equals one of the class names
* of the element */
function validBasedOnClass(thisClass) {
var classBack = ""; /* <string> classBack. This string will be returned*/
switch(thisClass) {
case "": /* An empty class name - Nothing to check*/
case "invalid": /* "invalid" - Remove this class, so that the
* code can validate again (when the "reqd" class
* is encountered) */
break;
case "reqd": /* class name == "reqd" */
/* <boolean> `allGood` is defined at the main function.
* This function will only mark the FIRST invalid input field
* as defined in this function, and the main function */
if (allGood && thisTag.value == "") {
classBack = "invalid "; /*Return class "invalid"*/
}
classBack += thisClass;
/* `classBack` now holds "invalid reqd" or "reqd" */
break;
default:
classBack += thisClass; /* Unknown class, ignore it */
}
return classBack; //Return the (altered) class
}
}
function validForm() {
var allGood = true;
var allTags = document.getElementsByTagName("*");
for (var i=0; i<allTags.length; i++) { /*Walks through all elements*/
if (!validTag(allTags[i])){ /*Checks whether an element is invalid or not*/
allGood = false;
/* `allGood` = false, notifies <function> allTags that an invalid
* element has already been detected. */
}
}
return allGood;
... //function validTag below