Copy input values from one form to another
javascript, jquery
Solution
You don't need to clone or replace, just change the `value`
jQuery(function( $ ) {
function copyForms( $form1 , $form2 ) {
$(':input[name]', $form2).val(function() {
return $(':input[name=' + this.name + ']', $form1).val();
});
}
$('#copy').on('click', function() {
copyForms( $('#form1') , $('#form2') );
});
});
/*this demo only*/
body{display:flex;}form{padding:16px;background:#ddd;}form>*{box-sizing:border-box;width:100%;}
<form id=form1>
FORM
<input name=a type=text value="FOO">
<input name=b type=button value="BAR">
<textarea name=c>BAZ</textarea>
<select name=d>
<option value="a">a</option>
<option value="b" selected>b</option>
</select>
</form>
<button id="copy">COPY→</button>
<form id=form2>
HIDDEN FORM
<input name=a type=text>
<input name=b type=button value="...">
<textarea name=c></textarea>
<select name=d>
<option value="a">a</option>
<option value="b">b</option>
</select>
</form>
<script src="//code.jquery.com/jquery-3.1.0.min.js"></script>
- By using `:input[name]` you're making sure to target only `:input`s with a `name` attribute
- `$(':input[name]', form2)` = descendants of `#form2`
- Using the `val` callback you can target every single one of the targeted inputs
- returning their values to be exactly as their referenced same-named- `:inputs` of `#form1`
Problem
What would be the best way to copy input values from one form to another where the inputs in each form have the same name? I came up with the following, however, it seems terribly inefficient (I know, efficiency probably doesn't matter, but would still like to know). Thanks http://jsbin.com/beyixeqa/1/ ``` <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Testing</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $('#copy').click(function(){ var form1=$('#form1').find(':input'); var form2=$('#form2'); form1.each(function() { var $t=$(this); form2.find('[name="'+$t.attr('name')+'"]').val($t.val()); }); }); }); </script> </head> <body> <button id="copy">copy</button> <form id="form1"> <input name="a" type=text> <input name="b" type=text> <input name="c" type=text> <input name="d" type=text> </form> <form id="form2"> <input name="a" type=text> <input name="b" type=text> <input name="c" type=text> <input name="d" type=text> </form> </body> </html> ```