Может ли кто-нибудь объяснить эти коды JavaScript для меня? - PullRequest
1 голос
/ 24 февраля 2011

Все коды для проверки формы.Что я не понимаю, так это общая идея кодов JavaScript.Может ли кто-нибудь объяснить общую идею этого кода JavaScript, а также объяснить function validForm() и функцию validBasedOnClass(thisClass)?Большое спасибо.

Эта HTML-страница содержит поля формы, которые должны быть заполнены пользователем перед отправкой формы.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Password Check</title>
    <link type="text/css" rel="stylesheet" href="script03.css" />
    <script type="text/javascript" src="script03.js"></script>
</head>
<body>
<form action="#">
    <p><label for="userName">Your name: <input type="text" size="30" id="userName" class="reqd" /></label></p>
    <p><label for="passwd1">Choose a password: <input type="password" id="passwd1" class="reqd" /></label></p>
    <p><label for="passwd2">Verify password: <input type="password" id="passwd2" class="reqd passwd1" /></label></p>
    <p><input type="submit" value="Submit" />&nbsp;<input type="reset" /></p>
</form>
</body>

ЭтоФайл CSS устанавливает стиль для недопустимых элементов формы.

body {
    color: #000;
    background-color: #FFF;
}

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

label.invalid {
    color: #F00;
    font-weight: bold;
}

Этот JavaScript выполняет проверку формы.

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;
        }
    }
}

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Одна секция за раз:

window.onload = initForms;

function initForms() {
    for (var i=0; i< document.forms.length; i++) {
        document.forms[i].onsubmit = function() {return validForm();}
    }
}

Это устанавливает любую форму на странице для первого вызова validForm() до ее отправки, если эта функция возвращает false, форма не будет отправлена.

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;

<...snip...>

Этот раздел захватывает все элементы и начинает их циклически повторять, вызывая функцию validTag для каждого элемента и передавая эту функцию каждому объекту-тегу. Если validTag возвращает false, то для переменной allGood устанавливается значение false. Как только цикл всех элементов завершен, он возвращает переменную allGood обратно в обработчик, упомянутый в предыдущем разделе. Если значение равно false, форма не отправляется.

    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;

validTag функция принимает 1 параметр, тег HTML. Он просматривает имена классов, примененные к этому тегу, и передает каждое из них в функцию validBasedOnClass. Он собирает результаты этих нескольких вызовов validBasedOnClass и помещает их в переменную outClass. Затем код проверяет, содержит ли переменная outClass слово «неверный», если это так, элемент получает фокус клавиатуры, а если элемент является тегом типа INPUT, текст подсвечивается и возвращается значение false, поэтому * Функция 1019 *, указанная выше, теперь установит для allGood значение false, и форма не будет отправлена.

        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;
        }
    }
}

Функция validBasedOnClass просматривает по одному имени класса за раз из данного тега, и если для него установлено значение 'reqd', то она проверяет, что значение элемента не является пустым, если оно есть, то возвращает оба исходное имя класса и добавленный к нему класс 'invalid'. Который запускает вышеуказанное задокументированное поведение в функции validTag.

1 голос
/ 24 февраля 2011

В итоге : согласно этому коду функция JS validForm присоединяется к событию onSubmit всех форм на этой странице. Функция JS validForm выполняет итерацию по всем элементам проверки формы, если для этих элементов определено имя класса css «reqd». Если classname имеет значение «reqd» и значение пусто для элемента, тогда он добавляет специальное имя класса css 'invalid' в имена классов css этого элемента, тем самым придавая этому элементу КРАСНЫЙ цвет. Кроме того, JS-код также устанавливает фокус, и для этого недопустимого элемента и недопустимого элемента INPUT также будет выделен их текст.

validSasedOnClass JS-функция в основном делает то, что ее имя, то есть проверяет, имеет ли имя класса элемента «reqd» И если его значение пусто.

0 голосов
/ 08 марта 2011

Учитывая, что это прямо из JavaScript & Ajax для Интернета: Visual QuickStart Guide, 7-е издание 1 , с чем конкретно у вас возникают проблемы в (line-объяснение на страницах 167-171?

1 В соавторстве с мной, кстати.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...