Reputation: 57
I have a form with 3 input fields. 1 for firstname, 1 for lastname and 1 for fullname. What I want to achieve if the user is:
filling in firstname & lastname, and the form -on the fly- combines firstname and lastname in the "fullname field"
OR
The fullname field is provided, and the form -on the fly- puts the firstname in the firstname field and the lastname in the lastname field.
<label>Firstname<span class="small">Add the Artists firstname</span>
</label>
<input type="text" name="artistfield_fname" id="Artist_fname" />
<label>Lastname<span class="small">Add the Artists lastname</span>
</label>
<input type="text" name="artistfield_lname" id="Artist_lname" />
<label>Artist<span class="small">Add the Artists full name</span></label>
<input type="text" name="artistfield_fullname" id="Artist_fullname" />
Upvotes: 1
Views: 1592
Reputation: 182
Try This. In Html..
<label>Firstname<span class="small">Add the Artists firstname</span>
</label>
<input type="text" name="artistfield_fname" id="Artist_fname" onkeyup="SetFullName()"/>
<label>Lastname<span class="small">Add the Artists lastname</span>
</label>
<input type="text" name="artistfield_lname" id="Artist_lname" onkeyup="SetFullName()"/>
<label>Artist<span class="small">Add the Artists full name</span></label>
<input type="text" name="artistfield_fullname" id="Artist_fullname" onkeyup="NameSplitter()"/>
In Javascript
function SetFullName()
{
document.getElementById("Artist_fullname").value="";
document.getElementById("Artist_fullname").value=document.getElementById("Artist_fname").value+" "+document.getElementById("Artist_lname").value;
}
function NameSplitter()
{
var namedata=document.getElementById("Artist_fullname").value.split(" ");
if(namedata.length==1)
document.getElementById("Artist_fname").value=namedata[0];
if(namedata.length>1 && namedata.length<=2)
{
document.getElementById("Artist_fname").value=namedata[0];
document.getElementById("Artist_lname").value=namedata[1];
}
if(namedata.length>2)
{
for(var i=0;i<namedata.length-1;i++){
if(i==0)
document.getElementById("Artist_fname").value=namedata[i];
else
document.getElementById("Artist_fname").value=document.getElementById("Artist_fname").value+" "+namedata[i];
}
document.getElementById("Artist_lname").value=namedata[namedata.length-1];
}
}
Upvotes: 1
Reputation: 14169
You need to create a data-binding among these fields... there is an example:
jQuery(document).ready(UserInfoCtrl);
function UserInfoCtrl($) {
var self = this;
var form = $('#form');
var fname = $('#fname');
var lname = $('#lname');
var fullname = $('#fullname');
self.updateFirstName = function(firstName) {
var _lname = lname.val() || (fullname.val() || '').trim().split(' ').pop();
fullname.val(firstName + ' ' + _lname);
};
self.updateLastName = function(lastName) {
var _fname = fname.val() || (fullname.val() || '').trim().split(' ').shift();
fullname.val(_fname + ' ' + lastName);
};
self.updateFullName = function(fullName) {
var _fullname = (fullName || '').trim().split(' ');
fname.val((_fullname[0] || ''));
lname.val((_fullname[1] || ''));
};
self.onFieldChange = function(e) {
switch(this.id) {
case 'fname':
self.updateFirstName(this.value);
break;
case 'lname':
self.updateLastName(this.value);
break;
case 'fullname':
self.updateFullName(this.value);
break;
}
};
fname.add(lname).add(fullname).change(self.onFieldChange);
form.submit(function(e) {
e.preventDefault();
return false;
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form">
<label for="fname">First Name</label>
<input type="text" id="fname" />
<hr>
<label for="lname">Last Name</label>
<input type="text" id="lname" />
<hr>
<label for="fullname">Full Name</label>
<input type="text" id="fullname" />
</form>
Upvotes: 1