How to gray out HTML form inputs?

12,890

Solution 1

Deleted my other post entirely and replaced with all the code you should need:

    <script type="text/javascript">

    function disable_enable()
    {
        if(document.getElementById("checkbox").checked != 1)
        {
            document.getElementById("input1").removeAttribute("disabled");
            document.getElementById("input2").removeAttribute("disabled");
            document.getElementById("input3").removeAttribute("disabled");
            document.getElementById("input4").removeAttribute("disabled");
        }
        else
        {
            document.getElementById("input1").setAttribute("disabled","disabled");
            document.getElementById("input2").setAttribute("disabled","disabled");
            document.getElementById("input3").setAttribute("disabled","disabled");
            document.getElementById("input4").setAttribute("disabled","disabled");
        }
    }

    </script>

and

    <label>Mailing address same as residental address</label>
    <input id="checkbox" onClick="disable_enable()" type="checkbox" style="width:15px"/><br/><br/>
    <input type="text" id="input1" />
    <input type="text" id="input2" />
    <input type="text" id="input3" />
    <input type="text" id="input4" />

Solution 2

Unfortunately, since you're doing it in response to user input without a form being sent back to the server, you have to do it through JavaScript.

input elements in JavaScript have both readonly and disabled attributes. If you want them completely disabled, you need to use JavaScript (or a library like jQuery) to change the disabled attribute's value to "disabled".

Note that the disabled inputs will not have their values sent to the server when the form is submitted.

Solution 3

Basically, loop through inputs, check if they're checkboxes, add event handlers...

Working sample in plain old javascript: http://www.theredhead.nl/~kris/stackoverflow/enable-or-disable-input-based-on-checkbox.html

the code:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
    <head>
        <title>Enable/disable input based on checkbox</title>
        <script type="text/javascript">
        // setup a bit of code to run after the document has loaded. (note that its set on window)
        window.addEventListener('load', function(){
            potential_checkboxes = document.getElementsByTagName('input');
            for(i = 0; i < potential_checkboxes.length; i ++) {
                element = potential_checkboxes[i];
                // see if we have a checkbox

                if (element.getAttribute('type') == 'checkbox') {
                    // initial setup
                    textbox = document.getElementById(element.getAttribute('rel'));
                    textbox.disabled = ! element.checked;

                    // add event handler to checkbox
                    element.addEventListener('change', function() {
                        // inside here, this refers to the checkbox that just got changed
                        textbox = document.getElementById(this.getAttribute('rel'));
                        // set disabled property of textbox to not checked property of this checkbox
                        textbox.disabled = ! this.checked;
                    }, false);
                }               
            }
        }, false);
        </script>
    </head>
    <body>
        <h1>Enable/disable input based on checkbox.</h1>

        <form>
            <label for="textbox_1">
                Textbox 1: 
                <input id="textbox_1" type="text" value="some value" />
            </label>
            <br />
            <input id=="checkbox_1" type="checkbox" rel="textbox_1" />
            <label for="checkbox_1">Enable textbox 1?</label>
            <hr />
        <form>
    </body>
</html>
Share:
12,890
ubiquibacon
Author by

ubiquibacon

ubiq·ui·ba·con - a side of a pig cured and smoked existing or being everywhere at the same time.

Updated on June 07, 2022

Comments

  • ubiquibacon
    ubiquibacon almost 2 years

    What is the best way to gray out text inputs on an HTML form? I need the inputs to be grayed out when a user checks a check box. Do I have to use JavaScript for this (not very familiar with JavaScript) or can I use PHP (which I am more familiar with)?

    EDIT:

    After some reading I have got a little bit of code, but it is giving me problems. For some reason I cannot get my script to work based on the state of the form input (enabled or disabled) or the state of my checkbox (checked or unchecked), but my script works fine when I base it on the values of the form inputs. I have written my code exactly like several examples online (mainly this one) but to no avail. None of the stuff that is commented out will work. What am I doing wrong here?

    <label>Mailing address same as residental address</label>
    <input name="checkbox" onclick="disable_enable()" type="checkbox" style="width:15px"/><br/><br/>
    
    <script type="text/javascript">
    
        function disable_enable(){
    
            if (document.form.mail_street_address.value==1)
                document.form.mail_street_address.value=0;
                //document.form.mail_street_address.disabled=true;
                //document.form.mail_city.disabled=true;
                //document.form.mail_state.disabled=true;
                //document.form.mail_zip.disabled=true;
    
            else
                document.form.mail_street_address.value=1;
                //document.form.mail_street.disabled=false;
                //document.form.mail_city.disabled=false;
                //document.form.mail_state.disabled=false;
                //document.form.mail_zip.disabled=false;
    
        }
    
    </script>
    

    EDIT:

    Here is some updated code based upon what @Chief17 suggested. Best I can tell none of this is working. I am using value as a test because it works for some reason

                <label>Mailing address same as residental address</label>
            <input name="checkbox" onclick="disable_enable()" type="checkbox" style="width:15px"/><br/><br/>
    
            <script type="text/javascript">
    
                function disable_enable(){
    
                    if (document.getElementById("mail_street_address").getAttribute("disabled")=="disabled")
                        document.form.mail_street_address.value=0;
                        //document.getElementById("mail_street_address").removeAttribute("disabled");
                        //document.getElementById("mail_city").removeAttribute("disabled");
                        //document.getElementById("mail_state").removeAttribute("disabled");
                        //document.getElementById("mail_zip").removeAttribute("disabled");
    
                    else
                        document.form.mail_street_address.value=1;
                        //document.getElementById("mail_street_address").setAttribute("disabled","disabled");
                        //document.getElementById("mail_city").setAttribute("disabled","disabled");
                        //document.getElementById("mail_state").setAttribute("disabled","disabled");
                        //document.getElementById("mail_zip").setAttribute("disabled","disabled");
                }
    
            </script>