表单序列化 P436


DOCTYPE html>
<html>
<head>
    <title>表单序列化title>
    <script type="text/javascript" src="EventUtil.js">script>
head>
<body>
    <form method="post" action="javascript:alert('Form submitted!')" id="myForm">
        <ul>
            <li><input type="radio" name="color" value="red">Redli>
            <li><input type="radio" name="color" value="green">Greenli>
            <li><input type="radio" name="color" value="blue">Blueli>
        ul>
        <fieldset>
            <legend>Locationslegend>
            <div>
                <label for="selLocation">Where do you want to live?label>
                <select name="location" id="selLocation">
                    <option value="Sunnyvale, CA">Sunnyvaleoption>
                    <option value="Los Angeles, CA">Los Angelesoption>
                    <option value="Mountain View, CA">Mountain Viewoption>
                    <option value="">Chinaoption>
                    <option>Australiaoption>
                select>
            div>
            <div>
                <label for="selLocation2">Where do you want to work?label>
                <select name="location2" id="selLocation2" multiple size="5">
                    <option value="Sunnyvale, CA">Sunnyvaleoption>
                    <option value="Los Angeles, CA">Los Angelesoption>
                    <option value="Mountain View, CA">Mountain Viewoption>
                    <option value="">Chinaoption>
                    <option>Australiaoption>
                select>
            div>
        fieldset>
        <div>
            <label for="comments">Any other comments?label><br>
            <textarea rows="10" cols="50" id="comments" name="comments">textarea>
        div>
        <input type="button" value="Serialize Form" id="serialize-btn">
    form>     
    <script type="text/javascript">
        function serialize(form){        
            var parts = [],
                field = null,
                i,
                len,
                j,
                optLen,
                option,
                optValue;
            
            for (i=0, len=form.elements.length; i < len; i++){
                field = form.elements[i];
            
                switch(field.type){
                    case "select-one":
                    case "select-multiple":
                    
                        if (field.name.length){
                            for (j=0, optLen = field.options.length; j < optLen; j++){
                                option = field.options[j];
                                if (option.selected){
                                    optValue = "";
                                    if (option.hasAttribute){
                                        optValue = (option.hasAttribute("value") ? option.value : option.text);
                                    } else {
                                        optValue = (option.attributes["value"].specified ? option.value : option.text);
                                    }
                                    parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue));
                                }
                            }
                        }
                        break;
                        
                    case undefined:     //fieldset
                    case "file":        //file input
                    case "submit":      //submit button
                    case "reset":       //reset button
                    case "button":      //custom button
                        break;
                        
                    case "radio":       //radio button
                    case "checkbox":    //checkbox
                        if (!field.checked){
                            break;
                        }
                        /* falls through */
                                    
                    default:
                        //don't include form fields without names
                        if (field.name.length){
                            parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));
                        }
                }
            }        
            return parts.join("&");
        }
        
        var btn = document.getElementById("serialize-btn");
        EventUtil.addHandler(btn, "click", function(event){
            var form = document.forms[0];
            alert(serialize(form));
        });

    script>
body>
html>