close
文章出處

表單HTML

<form action="" method="post">
        <fieldset class="login">
            <legend>Login information</legend>
            <label for="userName" class="hover">UserName:</label>
            <input type="text" id="userName" class="required text" /><br />
            <label for="password" class="hover">Password:</label>
            <input type="text" id="password" class="required text" /><br />
        </fieldset>
        <fieldset>
            <legend>Personal Information</legend>
            <label for="name" class="hover">Name:</label>
            <input type="text" id="name" class="required text" /><br />
            <label for="email" class="hover">Email:</label>
            <input type="text" id="email" class="required text email" /><br />
            <label for="date" class="hover">Date:</label>
            <input type="text" id="date" class="required text" /><br />
            <label for="url" class="hover">Website:</label>
            <input type="text" id="url" class="url text" value="http://" /><br />
            <label for="phone" class="hover">Phone:</label>
            <input type="text" id="phone" class="phone text" /><br />
            <label for="age" class="hover">Age:</label>
            <input type="checkbox" id="age" name="age" value="yes" /><br />

            <input type="submit" value="Submit Form" class="submit" />
        </fieldset>
    </form>

表單的CSS樣式

        form {
            font-family: Arial;
            font-size: 14px;
            width: 300px;
        }

        fieldset {
            border: 1px solid #ccc;
            margin-bottom: 10px;
        }

            fieldset.login input {
                width: 125px;
            }

        legend {
            font-weight: bold;
            font-size: 1.1em;
        }

        label {
            display: block;
            width: 60px;
            text-align: right;
            float: left;
            padding-right: 10px;
            margin: 5px 0;
        }

        input {
            margin: 5px 0;
        }

            input.text {
                padding: 0 0 0 3px;
                width: 172px;
            }

            input.submit {
                margin: 15px 0 0 70px;
            }

        ul.errors {
            list-style: none;
            background: #ffcece;
            padding: 3px;
            margin: 3px 0 3px 70px;
            font-size: 0.9em;
            width: 165px;
        }
View Code

 

表單JavaScript

        var errMsg = {
            //檢查特定字段是否必填
            required: {
                msg: 'This field is required.',
                test: function (obj, load) {
                    return obj.value.length > 0 && obj.value != obj.defaultValue;
                }
            },
            //確保字段內容是正確的email地址
            email: {
                msg: 'Not a valid email address.',
                test: function (obj) {//確保有內容的輸入并符合email地址的格式
                    return !obj.value || /^[a-z0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/i.test(obj.value);
                }
            },
            //確保字段內容是電話號碼并將其自動格式化
            phone: {
                msg: 'Not a valid phone number',
                test: function (obj) {
                    var m = /(\d{3}).*(\d{3}).*(\d{4})/.exec(obj.value);
                    if (m) {
                        obj.value = "(" + m[1] + ")" + m[2] + "-" + m[3];
                        return !obj.value || m;
                    }
                }
            },
            //確保字段內容符合MM/DD/YYYY的時間格式
            date: {
                msg: 'Not a valid date.',
                test: function (obj) {
                    return !obj.value || /^\d{2}\/d{2}\/d{2,4}$/.test(obj.value);
                }
            },
            url: {
                msg: 'Not a valid URL.',
                test: function (obj) {
                    return !obj.value || obj.value == 'http:://' ||
                        /^https?:\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/.test(obj.value);
                }
            }

        };
        //隱藏當前正在顯示的任何錯誤信息
        function hideErrors(elem) {
            var next = elem.nextSibling;//獲取當前字段的下一個元素
            if (next && next.nodeName == 'UL' && next.className == 'errors') {//如果下一個元素是ul并有class為errors
                elem.parentNode.removeChild(next);//刪掉它
            }
        }
        //顯示表單內特定字段的錯誤信息
        function showErrors(elem, errors) {
            var next = elem.nextSibling;//獲取當前字段的下一個元素
            if (next && (next.nodeName != 'UL' || next.className != 'errors')) {
                next = document.createElement('ul');
                next.className = 'errors';
                elem.parentNode.insertBefore(next, elem.nextSibling);
            }
            //有一個包含錯誤的容器引用,我們可以遍歷所有的錯誤信息
            for (var i = 0; i < errors.length; i++) {
                var li = document.createElement('li');//為每一個錯誤信息創建新的li包裹器
                li.innerHTML = errors[i];
                next.appendChild(li);//并插入到dom中
            }
        }
        //驗證表單所有字段的函數
        //form參數應是一個表單元素的引用 
        //load參數應該是一個布爾值  用以判別驗證函數在頁面加載時執行還是動態執行
        function validateForm(form, load) {
            var valid = true;
            for (var i = 0; i < form.elements.length; i++) {//遍歷表單的所有字段的一個數組
                hideErrors(form.elements[i]);//先將所有錯誤信息隱藏
                if (!validateField(form.elements[i], load)) {
                    valid = false;
                }
            }
            return valid;//如果字段是不正確的內容,則返回false,反之則返回true;
        }
        //驗證單個字段的內容
        function validateField(elem, load) {
            var errors = [];
            for (var name in errMsg) {
                var re = new RegExp("(^|\\s)" + name + "(\\s|$)");        
                if (re.test(elem.className) && !errMsg[name].test(elem, load)) {//如果沒有通過驗證,把錯誤信息增加到列表中
                    errors.push(errMsg[name].msg);
                }
            }
            if (errors.length) {//如果存在錯誤信息,則顯示出來
                showErrors(elem, errors);
            }
            return errors.length > 0;
        }
       
        function getInputsByName(name) {
            var result = [];//匹配的input元素的數組
            result.numChecked = 0;//追蹤被選中元素的數量
            var input = document.getElementsByTagName('input');
            for (var i = 0; i < input.length; i++) {
                if (input[i].name == name) {//找出所有指定name的字段
                    result.push(input[i]);//保存結果
                    if (input[i].checked) {//記錄被選中字段的數量
                        result.numChecked++;
                    }
                }
            }
            return result;//返回匹配的字段集合
        }
        window.onload = function () {
            var form = document.getElementsByTagName('form')[0];
            form.onsubmit = function () {
                validateForm(form, 'submit');
                return false;
            }
        }

 


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    AutoPoster 發表在 痞客邦 留言(0) 人氣()