irt.org Home Articles FAQs XREF Games Software Instant Books BBS About FOLDOC RFCs Feedback Sitemap
irt

Q909 Is it possible to access the default values of form elements and stop the submission of a form if none of its elements have been changed?

You are here: irt.org | FAQ | JavaScript | Form | 5 | Q909 [ previous next ]

Yes, try the following which utilises the form elements type property for JavaScript 1.1 and greater, or the form elements name property for JavaScript 1.0:

<script language="JavaScript"><!--
function testDefaultValues(what) {
    var result = true;
    var output = '';
    for (var i=0, j=what.elements.length; i<j; i++) {
        myName = what.elements[i].name;
        if (myName.indexOf('checkbox') > -1 || myName.indexOf('radio') > -1) {
            if (what.elements[i].checked && what.elements[i].defaultChecked) {
                output += what.elements[i].name + ' is still checked' + '\n';
                result = false
            }
        }
        if (myName.indexOf('hidden') > -1 || myName.indexOf('password') > -1 || myName.indexOf('text') > -1) {
            if (what.elements[i].value == what.elements[i].defaultValue) {
                output += what.elements[i].name + ' still equals "' + what.elements[i].defaultValue + '"' + '\n';
                result = false
            }
        }
        if (myName.indexOf('select') > -1) {
            for (var k=0, l=what.elements[i].options.length; k<l; k++) {
                if (what.elements[i].options[k].selected && what.elements[i].options[k].defaultSelected) {
                    output += what.elements[i].name + ' option ' + k + ' is still selected' + '\n';
                    result = false
                }
            }
        }
    }

    if (output != '')
        alert(output);
    return result;
}
//--></script>

<script language="JavaScript1.1"><!--
function testDefaultValues(what) {
    var result = true;
    var output = '';
    for (var i=0, j=what.elements.length; i<j; i++) {
        myType = what.elements[i].type;
        if (myType == 'checkbox' || myType == 'radio') {
            if (what.elements[i].checked && what.elements[i].defaultChecked) {
                output += what.elements[i].name + ' is still checked' + '\n';
                result = false
            }
        }
        if (myType == 'hidden' || myType == 'password' || myType == 'text' || myType == 'textarea') {
            if (what.elements[i].value == what.elements[i].defaultValue) {
                output += what.elements[i].name + ' still equals "' + what.elements[i].defaultValue + '"' + '\n';
                result = false
            }
        }
        if (myType == 'select-one' || myType == 'select-multiple') {
            for (var k=0, l=what.elements[i].options.length; k<l; k++) {
                if (what.elements[i].options[k].selected && what.elements[i].options[k].defaultSelected) {
                    output += what.elements[i].name + ' option ' + k + ' is still selected' + '\n';
                    result = false
                }
            }
        }
    }

    if (output != '')
        alert(output);
    return result;
}
//--></script>

<form name="myForm" onSubmit="return testDefaultValues(document.myForm)">
<br><input name="checkbox1" type="checkbox"><input name="checkbox2" type="checkbox" checked>
<br><input name="hidden" type="hidden" value="hidden value">
<br><input name="password" type="password" value="password value">
<br><input name="radio" type="radio" checked><input name="radio" type="radio">
<br><input name="text" type="text" value="text value">
<br><textarea name="textarea">textarea value</textarea>
<br><select name="select1">
<option>0
<option>1
<option selected>2
<option>3
</select>
<br><select name="select2" multipe size="2">
<option>0
<option>1
<option selected>2
<option>3
</select>
<p><input type="submit" value="Test Default Values">
</form>

©2013 Martin Webb

ArticlesFAQsGamesFeedback

FOLDOCRFCsInstant JavaScriptSoftwareBooksJavaScript Programmer's ReferenceAboutTop