开发者

Add to HTML form without losing current form input information in Javascript

开发者 https://www.devze.com 2022-12-18 19:18 出处:网络
I have a drop down which builds a form based of the selections that are selected. So, if someone selects \'foobar\', it displays a text field, if they choose \'ch开发者_开发技巧eese\', it displays rad

I have a drop down which builds a form based of the selections that are selected. So, if someone selects 'foobar', it displays a text field, if they choose 'ch开发者_开发技巧eese', it displays radio buttons. The user can then enter data into these forms as they go along. The only problem is that when they add a new form element, all the rest of the information is erased. Im currently using the following to do add to the form:

document.getElementById('theform_div').innerHTML = 
    document.getElementById('theform_div').innerHTML + 'this is the new stuff';

How can I get it to keep whatever has be enetered in the form and also add the new field to the end?


Setting innerHTML destroys the contents of the element and rebuilds it from the HTML.

You need to build a separate DOM tree and add it by calling appendChild.

For example:

var container = document.createElement("div");
container.innerHTML = "...";
document.getElementById("theform_div").appendChild(container);   

This is much easier to do using jQuery.


Step One:

Add jQuery to your headers:

<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js”></script>

Step Two:

Append, don't replace, data to your DIV like this:

$("#theform_div").append("your_new_html_goes_here");


Don't use innerHTML to create the form elements. With innerHTML you're overwriting the old HTML with new HTML which will recreate all the elements. Instead you need to use the DOM to create and append the elements.

EXAMPLE

function addRadioElement()
{
    var frm = document.getElementById("form_container");
    var newEl = document.createElement("input");
    newEl.type = "radio";
    newEl.name = "foo";
    newEl.value = "bar";
    frm.appendChild(newEl);        
}


The most correct way to do it without using a framework (like jQuery, Dojo, YUI) is:

var text = document.createTextNode('The text you want to write');
var div = document.createElement('div');
div.appendChild(text);

document.getElementById('theform_div').appendChild(div);

innerHTML, although supported by most browsers, is not standard compliant and - therefore, not guaranteed to work.


I would suggest using jQuery and its append function.

0

精彩评论

暂无评论...
验证码 换一张
取 消