Reputation: 77
I'm trying to fill forms and generate an email from that, but on big scale. HTML code is bellow and located on https://jsfiddle.net/csq7kwmb/4/:
<form class="form">
<label>Merchant name <input type="text" class="mName" value=""></label><br>
<label>Merchant ID number <input type="text" class="mId" value=""></label><br>
<label>Merchant email <input type="text" class="mEmail" value=""></label><br>
<button onclick="generateEmail()">
Generate
</button>
</form>
<p class="paragraph">
Merchant name is <span class="merchantN"></span>, merchant ID is <span class="merchantID"></span> and his email is <span class="merchantE"></span>.
</p>
function generateEmail() {
//generated email variable
var email = document.querySelector('.paragraph');
//input
var merchantName = document.querySelector('.mName');
var merchantId = document.querySelector('.mId');
var merchantEmail = document.querySelector('.mEmail');
//output
var paragraphName = document.querySelector('.merchantN');
var paragraphId = document.querySelector('.merchantID');
var paragraphEmail = document.querySelector('.merchantE');
//var paragraph = document.getElementById('field2');
//properly filled email
paragraphName.textContent = merchantName.value;
paragraphId.textContent = merchantId.value;
paragraphEmail.textContent = merchantEmail.value;
//displaying email, giding text fields
merchantName.style.display = none;
merchantId.style.display = none;
merchantEmail.style.display = none;
email.style.display = block;
}
The page, when i do that locally, only refreshes.
Upvotes: 2
Views: 300
Reputation: 8491
First of all, as mentioned by R10t, you need to move the button out of the form to avoid redirecting.
Second, if you open the browser console, you will see the following error once you click Generate:
Uncaught ReferenceError: generateEmail is not defined
This is related to the setup of your jsFiddle: in the JavaScript section click on JavaScript + No-Library (pure JS) and change the LOAD TYPE to No wrap - bottom of <head>
Third, you need quotes around none
and block
:
//displaying email, giding text fields
merchantName.style.display = 'none';
merchantId.style.display = 'none';
merchantEmail.style.display = 'none';
email.style.display = 'block';
Working jsFiddle: https://jsfiddle.net/ajdc8ypf/3/
function generateEmail() {
//generated email variable
var email = document.querySelector('.paragraph');
//input
var merchantName = document.querySelector('.mName');
var merchantId = document.querySelector('.mId');
var merchantEmail = document.querySelector('.mEmail');
//output
var paragraphName = document.querySelector('.merchantN');
var paragraphId = document.querySelector('.merchantID');
var paragraphEmail = document.querySelector('.merchantE');
//var paragraph = document.getElementById('field2');
//properly filled email
paragraphName.textContent = merchantName.value;
paragraphId.textContent = merchantId.value;
paragraphEmail.textContent = merchantEmail.value;
//displaying email, giding text fields
merchantName.style.display = 'none';
merchantId.style.display = 'none';
merchantEmail.style.display = 'none';
email.style.display = 'block';
}
.paragraph{
display: none;
}
<form class="form">
<label>Merchant name <input type="text" class="mName"></label><br>
<label>Merchant ID number <input type="text" class="mId"></label><br>
<label>Merchant email <input type="text" class="mEmail"></label><br>
</form>
<button onclick="generateEmail()">
Generate
</button>
<p class="paragraph">
Merchant nname is <span class="merchantN"></span>, merchant ID is <span class="merchantID"></span> and his email is <span class="merchantE"></span>.
</p>
UPD: If you want to use one JS function for many forms, you could pass the form number / id as a parameter and then query the form you need based on it. Take a look at this example:
function generateEmail(formNumber) {
//generated email variable
var email = document.querySelector('#paragraph' + formNumber);
//input
var merchantName = document.querySelector('#form' + formNumber + ' .mName');
var merchantId = document.querySelector('#form' + formNumber + ' .mId');
var merchantEmail = document.querySelector('#form' + formNumber + ' .mEmail');
//output
var paragraphName = document.querySelector('#paragraph' + formNumber + ' .merchantN');
var paragraphId = document.querySelector('#paragraph' + formNumber + ' .merchantID');
var paragraphEmail = document.querySelector('#paragraph' + formNumber + ' .merchantE');
//properly filled email
paragraphName.textContent = merchantName.value;
paragraphId.textContent = merchantId.value;
paragraphEmail.textContent = merchantEmail.value;
//displaying email, giding text fields
merchantName.style.display = 'none';
merchantId.style.display = 'none';
merchantEmail.style.display = 'none';
email.style.display = 'block';
}
.paragraph{
display: none;
}
FORM 1:
<br>
<form class="form" id="form1">
<label>Merchant name <input type="text" class="mName"></label><br>
<label>Merchant ID number <input type="text" class="mId"></label><br>
<label>Merchant email <input type="text" class="mEmail"></label><br>
</form>
<button onclick="generateEmail(1)">
Generate
</button>
<p id="paragraph1">
Merchant nname is <span class="merchantN"></span>, merchant ID is <span class="merchantID"></span> and his email is <span class="merchantE"></span>.
</p>
<br>
FORM 2:
<br>
<form class="form" id="form2">
<label>Merchant name <input type="text" class="mName"></label><br>
<label>Merchant ID number <input type="text" class="mId"></label><br>
<label>Merchant email <input type="text" class="mEmail"></label><br>
</form>
<button onclick="generateEmail(2)">
Generate
</button>
<p id="paragraph2">
Merchant nname is <span class="merchantN"></span>, merchant ID is <span class="merchantID"></span> and his email is <span class="merchantE"></span>.
</p>
Upvotes: 2
Reputation: 829
What is happening is because you have a <button>
inside of a <form>
element, when you click the button, the form is performing its submit action and this causes the page to refresh. What you will need to do is to prevent your form from being submitted or place your button outside of the form.
<form class="form">
<label>Merchant name <input type="text" class="mName"></label><br>
<label>Merchant ID number <input type="text" class="mId"></label><br>
<label>Merchant email <input type="text" class="mEmail"></label><br>
</form>
<button onclick="generateEmail()">
Generate
</button>
<p class="paragraph">
Merchant nname is <span class="merchantN"></span>, merchant ID is <span class="merchantID"></span> and his email is <span class="merchantE"></span>.
</p>
<form class="form" onsubmit="return false;">
<label>Merchant name <input type="text" class="mName"></label><br>
<label>Merchant ID number <input type="text" class="mId"></label><br>
<label>Merchant email <input type="text" class="mEmail"></label><br>
<button onclick="generateEmail()">
Generate
</button>
</form>
<p class="paragraph">
Merchant nname is <span class="merchantN"></span>, merchant ID is <span class="merchantID"></span> and his email is <span class="merchantE"></span>.
</p>
Upvotes: 2