• 0

[Javascript] Combine 2 form fields into one.


Question

I've got a credit card form and on submission it requires that the expiry date is submitted from a single string as mmyy. Instead, the form is mm and yy in separate submission boxes.

I figured it would be possible to take the two value's and combine them by sitcking them into a hidden field.

I found a script online and due to my very limited knowledge of javascript I wouldn't actually know what to do with this and it looks looks somewhat incomplete:

<script language=javascript>

funtion populate(){

Fname = document.form1.FirstName.value;

Lname = document.form1.LastName.value;

document.form1.CONTACT.value = Fname + " " + Lname;

}

</Script>

Then call the function with onchange on your lastname field <input ID="LastName" value="" onChange="populate()"

I'm completely full of cold at the moment so my brains not firing on all thrusters.

Would this require any library like jquery to work?

If there's a way to do this without javascript that would be even better. Thing is as the forms being submitted via a thirdparty api I don't have the luxury of combining them via PHP at form submission.

Appreciate any help.

Many thanks.

Alex

8 answers to this question

Recommended Posts

  • 0

No, it's simple.

<script type="text/javascript">
function join_ym()
{
var yy = document.getElementById('yy').value;
var mm = document.getElementById('mm').value;
document.getElementById('joint').value = yy+mm;
alert(document.getElementById('joint').value);
}
</script>

<input type="text" id="yy" />
<input type="text" id="mm" />
<input type="hidden" id="joint">
<input type="button" value="Join!" onclick="join_ym();">[/CODE]

Edit:

Time to explain. First we have a form with an id called 'yy'. We get its value through the [b]document.getElementById('id_name').value[/b] javascript function. Replace id_name with the id of the text input.

We do the same for mm. We get its value through the document.getElementById('mm').value, whereas mm is the text input's id.

We then assign the value to the hidden form, which I called [u][b]joint [/b][/u] through the same procedure as I took the other two's (mm and yy) value.

We do this again with the [b]document.getElementById('joint').value = [/b]function and operator, whereas joint is the id of hidden form.

For concatenating strings, I used the [b]+[/b] operator. Which joined the yy and mm variables together, forming a new string.

At the end, I used alert, to throw at screen what is the value of [b]joint, [/b]my hidden form.

I hope I've been clear, anything else just ask.

Edit #2. Since you seem to have PHP knowledge, the [b]+[/b] operator is analog to the [b].[/b] (dot) in PHP

  • 0

Thanks for this! I'm not at home right now so will implement this in the morning.

Would adding the function to the onclick operator on the submit button ensure that the appropriate hidden field was populated prior to the form being submitted? Or would it be best to have the relevant field updated as and when those fields are filled out?

Again, many thanks!

  • 0

Here you go:


<html>
<head>
</head>
<body>
<form action="" method="get">
<input type="text" name="name_first" placeholder="First Name" oninput="join_names();" onpaste="join_names();" /><br />
<input type="text" name="name_last" placeholder="Last Name" oninput="join_names();" onpaste="join_names();" /><br />
<input type="text" name="name_full" placeholder="Full Name" /><br />
<input type="submit" onclick="join_names();" />
</form>
<script type="text/javascript">
function concatenate(/*String*/string_one, /*String*/string_two, /*boolean*/with_space) {
if (with_space===true) {
return string_one+' '+string_two;
}
else {
return string_one+string_two;
}
}
function join_names() {
var input_name_first = document.getElementsByName('name_first')[0].value;
var input_name_last = document.getElementsByName('name_last')[0].value;
var input_name_full = document.getElementsByName('name_full')[0];
var var_name_full = concatenate(input_name_first, input_name_last, true);
input_name_full.value = var_name_full;
}
</script>
</body>
</html>
[/CODE]

This will not only update the code with every key they press, but also eliminates the need for ids for your elements if you don't want them. This works solely off of the name attribute of your inputs which is a bit cleaner and more useful if you are styling your inputs similarly (using classes instead of ids). Also, I added the ability to concatenate the strings with or without a space, and made it cross browser compatible. Hopefully you find this useful!

Also, if you plan on using a textarea, change the oninput attribute to textInput. :)

  • 0

Thanks fellas.

I combined elements from both methods to a nice simple scripts which seemingly does what I wanted. I based it mostly off Jose_49's method because it seemed simpler for me to achieve but if I've overlooked something please let me know:


&lt;input id="expiry" type="hidden" name="field18317078" value="" /&gt;


&lt;input id="month" class="tiny" placeholder="mm" type="text" oninput="join_expiry();" onpaste="join_expiry();"&gt;
&lt;input id="year" class="tiny" placeholder="yy" type="text" oninput="join_expiry();" onpaste="join_expiry();"&gt;


&lt;script type="text/javascript"&gt;
function join_expiry()
{
var mm = document.getElementById('month').value;
var yy = document.getElementById('year').value;
document.getElementById('expiry').value = mm+yy;
}
&lt;/script&gt;

  • 0

Thanks fellas.

I combined elements from both methods to a nice simple scripts which seemingly does what I wanted. I based it mostly off Jose_49's method because it seemed simpler for me to achieve but if I've overlooked something please let me know:


&lt;input id="expiry" type="hidden" name="field18317078" value="" /&gt;


&lt;input id="month" class="tiny" placeholder="mm" type="text" oninput="join_expiry();" onpaste="join_expiry();"&gt;
&lt;input id="year" class="tiny" placeholder="yy" type="text" oninput="join_expiry();" onpaste="join_expiry();"&gt;


&lt;script type="text/javascript"&gt;
function join_expiry()
{
var mm = document.getElementById('month').value;
var yy = document.getElementById('year').value;
document.getElementById('expiry').value = mm+yy;
}
&lt;/script&gt;

No probs.

Be careful with the oninput, placeholder methods. They are HTML5 and only modern browsers support it.

  • Like 2
  • 0

No probs.

Be careful with the oninput, placeholder methods. They are HTML5 and only modern browsers support it.

So I suppose it's best to add the function on submit too? Would "onclick" work with older browsers?

Well, the onpaste (which is not html5) has support accross IE, Firefox, Safari, and Chrome. The oninput is a more up-to-date method, and also adds support for Opera. By combining them, it is very unlikely that you will have any issues at all.

Thanks for pointing that out though. :)

  • 0

I have to say... THANK YOU!!!!!! Awesome how it worked like a charm to me! really THANK YOU!!!!!!!! i have implemented this into RsForm Pro with joomla! with a little variation to fit my forms.

My case was:
Create a user name field (one field of the form) based on two form field filled by the user, with a special caracter dividing the two captured field forms data.
Apart, the JS to do the trick of join two field into one, will be ran only if the user select to create the account selecting a checkbox field and if not nothign will be done.

<script type="text/javascript">
function copy(){
  //This is the check box option where i want if selected, the data to be copied to the form field "test"
if (document.getElementById("copy0").checked==true)
    
    {
var cupon = document.getElementById('cupon').value;
var celular = document.getElementById('celular').value;
//Agregue un signo '-' al resultado compilado y agregue un signo + al segundo valor.
document.getElementById('test').value = cupon+'-'+celular;
alert(document.getElementById('test').value);
    }
    //my checkbox got two options. So first one is "copy0" second one is "copy1" and if they choose secondone, no copy will be done.
    else if (document.getElementById("copy1").checked==true)
    
    {
    document.getElementById("cupon").value="";
    document.getElementById("celular").value="";
    }
    
}
</script>

XHTML 
<fieldset class="formFieldset">
<legend>{global:formtitle}</legend>
{error}
<!-- Do not remove this ID -->
<ol class="formContainer" id="Trend_{global:formid}_page_0">
	<li class="block-cupon">
		<div class="formCaption">{cupon:caption}<strong class="formRequired">(*)</strong></div>
		<div class="formBody">{cupon:body}<span class="formClr">{cupon:validation}</span></div>
		<div class="formDescription">{cupon:description}</div>
	</li>
	<li class="block-descphone">
		<div class="formCaption">{DescPhone:caption}</div>
		<div class="formBody">{DescPhone:body}<span class="formClr">{DescPhone:validation}</span></div>
		<div class="formDescription">{DescPhone:description}</div>
	</li>
	<li class="block-celular">
		<div class="formCaption">{celular:caption}<strong class="formRequired">(*)</strong></div>
		<div class="formBody">{celular:body}<span class="formClr">{celular:validation}</span></div>
		<div class="formDescription">{celular:description}</div>
	</li>
	<li class="block-email">
		<div class="formCaption">{email:caption}<strong class="formRequired">(*)</strong></div>
		<div class="formBody">{email:body}<span class="formClr">{email:validation}</span></div>
		<div class="formDescription">{email:description}</div>
	</li>
	<li class="block-test">
		<div class="formCaption">{test:caption}</div>
		<div class="formBody">{test:body}<span class="formClr">{test:validation}</span></div>
		<div class="formDescription">{test:description}</div>
	</li>
	<li class="block-copy">
		<div class="formCaption">{copy:caption}<strong class="formRequired">(*)</strong></div>
		<div class="formBody">{copy:body}<span class="formClr">{copy:validation}</span></div>
		<div class="formDescription">{copy:description}</div>
	</li>


</ol>
</fieldset>

Really thank you so much dude @Jose_49!

Quote

what tipe of course do you suggest to learn more about this? Jose_49

 

Edited by DavidDem
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Then the solution is to not let children have easy access to smart phones or internet until they are older, not mass surveillance. Only this would require parents to do actual parenting, most likely, as with any good solution to the problem.
    • "Microsoft says there are no known issues." I give them one day.
    • Minecraft is getting a Switch 2 native version with the Vibrant Visuals graphics upgrade by Pulasthi Ariyasinghe Microsoft's block-based sensation Minecraft is available on an astounding number of platforms, including PC, consoles, and mobile devices. Today, during the Nintendo Direct livestream, another version was announced, this one aimed at the Nintendo Switch 2 console. This native edition will use the new hardware's horsepower to finally bring the Vibrant Visuals graphics upgrade to players on the platform. While Nintendo Switch 2 players have been able to jump into Minecraft since the console's launch, this has only been via the backward-compatible original Switch version. With this new upgrade, players will be able to fully utilize the new hardware to run the game better and with new features. For those unfamiliar with it, the Vibrant Visuals upgrade landed earlier this year on PC (Bedrock), Xbox, PlayStation, and mobile platforms with the Chase the Skies update. This brought volumetric lighting, directional lighting, volumetric fog, and other elements to the sandbox title, letting players see aspects like sun rays, dynamic shadows, reflections in water, and shine on metallic blocks. "Survive the night or create a work of art in the iconic sandbox game," says Nintendo. "Build anything you can imagine, uncover mysteries, and face foes in an infinite world that’s unique in every playthrough." The Nintendo Switch 2 version of Minecraft seems to be a paid upgrade, as Nintendo says anyone who purchases this version will be able to carry over their save data from the original Switch version. Pricing details were not announced today, however. Meanwhile, the Nintendo exclusive Super Mario Mash-Up Pack will be available to all buyers of this version too, giving them a custom Mario-themed world as well as skins and tracks inspired by the series. The Nintendo Switch 2 version of Minecraft will be releasing sometime in 2026.
    • Windows 11 KB5094126 June 2026 Patch Tuesday update now available to download by Sayan Sen Microsoft has released the June 2026 Patch Tuesday updates for Windows 11 25H2, 24H2. The 25H2 and 24H2 update is provided via KB5094126 (manual download link below), build 26100.8655 on 24H2, and build 26200.8655 on 25H2, after applying the updates. Windows 11 23H2 is available under KB5093998 (manual download link below) (build 22631.7219). Microsoft has not published changelog yet. We will update the article once it's out. [Update: It's out] [Secure Boot] With this update, Windows quality updates include additional high confidence device targeting data, increasing coverage of devices eligible to automatically receive new Secure Boot certificates. Devices receive the new certificates only after demonstrating sufficient successful update signals, maintaining a controlled and phased rollout. [Virtualization] Fixed: This update addresses an issue that could result in Stop errors HYPERVISOR_ERROR (0x20001) and KMODE_EXCEPTION_NOT_HANDLED (0x1E) after installing KB5089573 on some devices during system restarts, virtual machine operations, or while running some gaming applications Microsoft says there are no known issues. These updates will be available from Windows Update and should install automatically in most cases. If you would like to download these updates for offline installation, you can get them from the Microsoft Catalog website. You can find the update for 25H2/24H2 at this link and 23H2 at this link.
    • Price Drop: Save 90% on ChatPlayground AI lifetime plan, and compare multiple AI models by Steven Parker Today's highlighted deal comes via our Apps + Software section of the Neowin Deals store, where for only a limited time, you can save up to 90% on ChatPlayground AI: Lifetime Subscriptions. ChatPlayground AI puts the world’s top AI models in one powerful interface, letting you enter a single prompt and instantly compare outputs from multiple models to choose the perfect response for your needs. Boost productivity and creativity with access to the latest AI giants like GPT-4o, Claude Sonnet 4, Gemini 1.5 Flash, DeepSeek V3, and dozens more — all in one window. Whether you’re chatting, coding, generating images, or refining prompts, ChatPlayground AI equips you with advanced tools like prompt engineering, image/PDF chat, saved conversations, and AI image creation, plus priority support to keep your workflow seamless. Access the world’s best AI models Side-by-Side Comparisons: Enter one prompt & instantly view results from multiple AI models to find the best output for your needs 40+ AI Models: Includes GPT-4o, Claude Sonnet 4, Gemini 1.5 Flash, DeepSeek V3, Llama, Perplexity, and many more Multi-Function Platform: Access AI for chat, image generation & coding all within a single interface Web Browser Extension: Offers a Chrome extension to seamlessly integrate the platform into your browsing workflow Boost productivity with powerful features ChatPlayground Interface: Designed for seamless AI model comparison in one window Prompt Engineering: Refine & optimize your prompts for better, more accurate responses Chat with Images & PDFs: Upload visuals and documents to get context-aware answers Saved Chat History: Keep track of past conversations for reference & ongoing projects AI Image Generation: Create high-quality visuals powered by top AI image models Priority Customer Support: Get faster assistance whenever you need it What you'll get with the Unlimited Plan Includes unlimited messages/month Built for prompt engineers, startups, and teams who run experiments nonstop Includes priority access to new features and future models Good to know Length of access: lifetime Redemption deadline: redeem your code within 30 days of purchase Access options: Desktop Max number of device(s): Unlimited Available to both NEW & Existing users Updates included A lifetime subscription to ChatPlayground AI (Unlimited Plan) normally costs $619, but you can pick it up for just $59.97 for a limited time - that represents a saving of $614 (90% off). Click the link below for more details, always check terms and specifications before making a purchase. Get this ChatPlayground AI (Unlimited) for $59.97 (was $619) There are also two other discounted plans to choose from. Although priced in U.S. dollars, this deal is available for digital purchase worldwide. Support queries If you have queries or need support for any of the Neowin Deals, please use the contact form here. Neowin Deals are managed and sold by StackCommerce who represent Neowin on an affiliate basis. Why we post these deals We post these because we earn commission on each sale so as not to rely solely on advertising, which many of our readers block. It all helps toward paying staff reporters, servers and hosting costs. So for those that keep moaning and complaining, be thankful we're still online for you to even do that. Other ways to support Neowin Whitelist Neowin by not blocking our ads Create a free member account to see fewer ads Make a donation to support our day to day running costs Subscribe to Neowin - for $14 a year, or $28 a year for an ad-free experience Disclosure: Neowin benefits from revenue of each sale made through our branded deals site powered by StackCommerce.
  • Recent Achievements

    • Week One Done
      rubentuben8 earned a badge
      Week One Done
    • Week One Done
      ARaclen earned a badge
      Week One Done
    • One Year In
      jojodbn earned a badge
      One Year In
    • One Month Later
      jojodbn earned a badge
      One Month Later
    • Week One Done
      jojodbn earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      515
    2. 2
      PsYcHoKiLLa
      229
    3. 3
      +Edouard
      118
    4. 4
      ATLien_0
      87
    5. 5
      Steven P.
      83
  • Tell a friend

    Love Neowin? Tell a friend!