1

I am building a website that takes in unique information (such as shareholder info and loan info) about specific store clients and stores them.

Because it is impossible to know how many shareholders/lenders a client has, the website has the ability to add and remove shareholders/Lenders and toggle between them being legal entities or individuals.

My issue:

My issue is that when I add a shareholder/Lender, the radio toggle (which is an onclick) function does not seem to work properly as I add new shareholders/lenders.

Is there a way to add shareholders/lenders (by cloning) while updating the onclick functions for each created shareholder?

I have replicated my code below in a JS fiddle: Client Project

HTML:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="aa.css" />
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="aa.js" defer></script>
  <title>Loan Agreement</title>
</head>

<body>
  <form action="#" class="form">
    <h1 class="text-center">Client Registration List</h1>
    <!-- Progress bar -->
    <div class="progressbar">
      <div class="progress" id="progress"></div>

      <div class="progress-step progress-step-active" data-title="Client Info"></div>
      <div class="progress-step" data-title="Shareholder Info"></div>
      <div class="progress-step" data-title="Loan Info"></div>
      <div class="progress-step" data-title="Background"></div>
      <div class="progress-step" data-title="Defs"></div>
    </div>

    <!-- Steps -->
    <div class="form-step form-step-active">
      <div class="checkbox">
        <label for="legalEntity">Legal Entity</label>
        <input type="radio" name="choice" id="legalEntity" value="legalEntity" onclick="filterForm()" checked />
        <label for="Individual">Individual</label>
        <input type="radio" name="choice" id="Individual" value="Individual" onclick="filterForm()" />
      </div>
      <div id="lec" class="legal-entity-content">
        <div class="input-group">
          <label for="CompanyName">Company Name</label>
          <input type="text" name="CompanyName" id="CompanyName" placeholder="Ex. My Pocket Counsel" />
        </div>
        <div class="input-group">
          <label for="RegisteredAddress">Registered Address</label>
          <input type="text" name="RegisteredAddress" id="RegisteredAddress" placeholder="Ex. MyPocketCounsel" />
        </div>
        <div class="input-group">
          <label for="RegistrationNumber">Registration Number</label>
          <input type="text" name="RegistrationNumber" id="RegistrationNumber" placeholder="Ex. MyPocketCounsel" />
        </div>
       
        <div class="input-group">
          <label for="Definedas">Defined as...</label>
          <input type="text" name="Definedas" id="Definedas" placeholder="Ex. MyPocketCounsel" />
        </div>
      </div>
      <div id="ic" class="individual-content hide">
        <div class="input-group">
          <label for="FirstName">First Name</label>
          <input type="text" name="FirstName" id="FirstName" placeholder="Ex. MyPocketCounsel" />
        </div>
        <div class="input-group">
          <label for="LastName">Last Name</label>
          <input type="text" name="LastName" id="LastName" placeholder="Ex. MyPocketCounsel" />
        </div>
        <div class="input-group">
          <label for="Address">Address</label>
          <input type="text" name="Address" id="Address" placeholder="Ex. MyPocketCounsel" />
        </div>
        <div class="input-group">
          <label for="Definedas">Defined as...</label>
          <input type="text" name="Definedas" id="Definedas" placeholder="Ex. MyPocketCounsel" />
        </div>
      </div>
      <div class="">
        <a href="#" class="btn btn-next width-50 ml-auto">Next</a>
      </div>
    </div>
    
    
    <div class="form-step">
      <div id="readroot">
        <div class="checkbox">
          <label for="LegalEntity">Legal Entity</label>
          <input type="radio" name="choice0" id="legalEntity0" value="legalEntity" onclick="filterForm0()" />
          <label for="Individual">Individual</label>
          <input type="radio" name="choice0" id="Individual0" value="Individual" onclick="filterForm0()" />
        </div>
        <div id="lec0" class="legal-entity-content">
          <div class="input-group">
            <label for="CompanyName">Company Name</label>
            <input type="text" name="CompanyName" id="CompanyName" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="RegisteredAddress">Registered Address</label>
            <input type="text" name="RegisteredAddress" id="RegisteredAddress" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="RegistrationNumber">Registration Number</label>
            <input type="text" name="RegistrationNumber" id="RegistrationNumber" placeholder="Ex. MyPocketCounsel" />
          </div>
         
          <div class="input-group">
            <label for="Definedas">Defined as...</label>
            <input type="text" name="Definedas" id="Definedas" placeholder="Ex. MyPocketCounsel" />
          </div>
        </div>
        <div id="ic0" class="individual-content hide">
          <div class="input-group">
            <label for="FirstName">First Name</label>
            <input type="text" name="FirstName" id="FirstName" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="LastName">Last Name</label>
            <input type="text" name="LastName" id="LastName" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="Address">Address</label>
            <input type="text" name="Address" id="Address" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="Definedas">Defined as...</label>
            <input type="text" name="Definedas" id="Definedas" placeholder="Ex. MyPocketCounsel" />
          </div>
        </div>
        <input type="button" value="Remove Lender" class="btn btn-remove-lender"
        onclick="if (counter >= 1){
            counter --;
            this.parentNode.parentNode.removeChild(this.parentNode);
        }else{alert('you must have at least one Lender');}">
      </div>
        
              <div>
        <div class="checkbox">
          <label for="LegalEntity">Legal Entity</label>
          <input type="radio" name="choice2" id="legalEntityX" value="legalEntityX" onclick="filterFormX()" />
          <label for="Individual">Individual</label>
          <input type="radio" name="choice2" id="IndividualX" value="IndividualX" onclick="filterFormX()" />
        </div>
        <div id="lecX" class="legal-entity-content">
          <div class="input-group">
            <label for="CompanyName">Company Name</label>
            <input type="text" name="CompanyName" id="CompanyName" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="RegisteredAddress">Registered Address</label>
            <input type="text" name="RegisteredAddress" id="RegisteredAddress" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="RegistrationNumber">Registration Number</label>
            <input type="text" name="RegistrationNumber" id="RegistrationNumber" placeholder="Ex. MyPocketCounsel" />
          </div>
         
          <div class="input-group">
            <label for="Definedas">Defined as...</label>
            <input type="text" name="Definedas" id="Definedas" placeholder="Ex. MyPocketCounsel" />
          </div>
        </div>
        <div id="icX" class="individual-content hide">
          <div class="input-group">
            <label for="FirstName">First Name</label>
            <input type="text" name="FirstName" id="FirstName" placeholder="Ex.MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="LastName">Last Name</label>
            <input type="text" name="LastName" id="LastName" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="Address">Address</label>
            <input type="text" name="Address" id="Address" placeholder="Ex. MyPocketCounsel" />
          </div>
          <div class="input-group">
            <label for="Definedas">Defined as...</label>
            <input type="text" name="Definedas" id="Definedas" placeholder="Ex. MyPocketCounsel" />
          </div>
        </div>
        <input type="button" value="Remove Lender" class="btn btn-remove-lender"
        onclick="if (counter >= 1){
            counter --;
            this.parentNode.parentNode.removeChild(this.parentNode);
        }else{alert('you must have at least one Lender');}">
      </div>
        <span id="writeroot" class="pls"></span>
        <div class="btns-group">
          <input type="button" id="morefields" value="Add Lender" class="btn btn-add-lender" onclick="moreFields()">

          <a href="#" class="btn btn-prev">Previous</a>
          <a href="#" class="btn btn-next">Next</a>
      </div>
      <!--
        "₦"


      -->
    </div>
    <div class="form-step">
      <div class="input-group">
        <label for="LoanAmount">Loan Amount</label>
        <div class="wrapper">
        <div class="input-group mb-2 mr-sm-2 mb-sm-0">
          <div class="input-group-addon currency-symbol">$</div>
          <input type="text" class="form-control currency-amount" id="inlineFormInputGroup" placeholder="0.00" size="8">
          <div class="input-group-addon currency-addon">

            <select class="currency-selector">
              <option data-symbol="$" data-placeholder="0.00">USD</option>
              <option data-symbol="€" data-placeholder="0.00">EUR</option>
              <option data-symbol="£" data-placeholder="0.00">GBP</option>
              <option data-symbol="₦" data-placeholder="0.00" selected>NGN</option>
              <option data-symbol="¥" data-placeholder="0">JPY</option>
              <option data-symbol="$" data-placeholder="0.00">CAD</option>
              <option data-symbol="$" data-placeholder="0.00">AUD</option>
            </select>
          </div>
          </div>
        </div>
      </div>
      <div class="input-group">
        <label for="Moratorium">Moratorium</label>
        <input type="text" name="Moratorium" id="Moratorium" placeholder="Ex. MyPocketCounsel" />
      </div>
      <div class="input-group">
        <label for="InterestRate">Interest Rate</label>
        <input type="text" name="InterestRate" id="InterestRate" placeholder="Ex. MyPocketCounsel" />
      </div>
      <div class="input-group">
        <label for="LoanDuration">Loan Duration/Maturity Date</label>
        <input type="text" name="LoanDuration" id="LoanDuration" placeholder="Ex. MyPocketCounsel" />
      </div>
      <div class="input-group">
        <label for="UseofLoan">Use of Loan</label>
        <input type="text" name="UseofLoan" id="UseofLoan" placeholder="Ex. MyPocketCounsel" />
      </div>
      <div class="">
        <div class="btns-group">
          <a href="#" class="btn btn-prev">Previous</a>
          <a href="#" class="btn btn-next">Next</a>
        </div>
      </div>
    </div>
    <div class="form-step">
      <div class="input-group">
        <label for="Recitals">Recitals</label>
        <input type="text" name="Recitals" id="Recitals" placeholder="Ex. MyPocketCounsel" />
      </div>
      <div class="">
        <div class="btns-group">
          <a href="#" class="btn btn-add-recital">Add Recital</a>
          <a href="#" class="btn btn-remove-recital">Remove Recital</a>
          <a href="#" class="btn btn-prev">Previous</a>
          <a href="#" class="btn btn-next">Next</a>
        </div>
      </div>
    </div>
    <div class="form-step">
      <div class="input-group">
        <label for="Definitions">Definitions</label>
        <input type="text" name="Definitions" id="Definitions" placeholder="Ex. MyPocketCounsel" />
      </div>
      <div class="">
        <div class="btns-group">
          <a href="#" class="btn btn-add-definition">Add Definition</a>
          <a href="#" class="btn btn-remove-definition">Remove Definition</a>
          <a href="#" class="btn btn-prev">Previous</a>
          <input type="submit" value="Submit" class="btn" />
        </div>
      </div>
  </form>
</body>

</html>

Javascript:

const prevBtns = document.querySelectorAll(".btn-prev");
const nextBtns = document.querySelectorAll(".btn-next");
const progress = document.getElementById("progress");
const formSteps = document.querySelectorAll(".form-step");
const progressSteps = document.querySelectorAll(".progress-step");

let formStepsNum = 0;

nextBtns.forEach((btn) => {
  btn.addEventListener("click", () => {
    formStepsNum++;
    updateFormSteps();
    updateProgressbar();
  });
});

prevBtns.forEach((btn) => {
  btn.addEventListener("click", () => {
    formStepsNum--;
    updateFormSteps();
    updateProgressbar();
  });
});

function updateFormSteps() {
  formSteps.forEach((formStep) => {
    formStep.classList.contains("form-step-active") &&
      formStep.classList.remove("form-step-active");
  });

  formSteps[formStepsNum].classList.add("form-step-active");
}

function updateProgressbar() {
  progressSteps.forEach((progressStep, idx) => {
    if (idx < formStepsNum + 1) {
      progressStep.classList.add("progress-step-active");
    } else {
      progressStep.classList.remove("progress-step-active");
    }
  });

  const progressActive = document.querySelectorAll(".progress-step-active");

  progress.style.width =
    ((progressActive.length - 1) / (progressSteps.length - 1)) * 100 + "%";
}

const IndividualContent = document.getElementById("ic");
IndividualContent.classList.add("hide");



function filterForm() {
 
  if(document.getElementById('legalEntity').checked) {
    //hide individual contnet
const IndividualContent = document.getElementById("ic");
IndividualContent.classList.add("hide");
const legalEntityContent = document.getElementById("lec");
legalEntityContent.classList.remove("hide");
  }else  {
    const legalEntityContent = document.getElementById("lec");
    legalEntityContent.classList.add("hide");
    const IndividualContent = document.getElementById("ic");
IndividualContent.classList.remove("hide");
  }
}
function filterFormX() {
 
  if(document.getElementById('legalEntityX').checked) {
    //hide individual contnet
const IndividualContent = document.getElementById("icX");
IndividualContent.classList.add("hide");
const legalEntityContent = document.getElementById("lecX");
legalEntityContent.classList.remove("hide");
  }else  {
    const legalEntityContent = document.getElementById("lecX");
    legalEntityContent.classList.add("hide");
    const IndividualContent = document.getElementById("icX");
IndividualContent.classList.remove("hide");

  }
  

}


//Function to get more Lenders ie. input fields
let counter = 0;
let idCounter =0;
//old count once we get to the 
    let OC = idCounter -1;
function moreFields() {
        var x, i;
    counter ++;
        idCounter ++;

   //old count
    let OC = idCounter -1;
    
            
    //change function name
    document.getElementById('legalEntity'+OC).onclick= filterForm1;
      document.getElementById('Individual'+OC).onclick= filterForm1;
    //let insertHere = document.getElementById('writeroot');
    let newFields = document.getElementById('readroot').cloneNode(true);
        newFields.id = '';
    newFields.style.display = 'block';
        console.log(OC);
    
        document.getElementById('legalEntity'+OC).id = 'legalEntity'+idCounter;
        document.getElementById('Individual'+OC).id = 'Individual'+idCounter;
        document.getElementById('ic'+OC).id = 'ic'+idCounter;
        document.getElementById('lec'+OC).id = 'lec'+idCounter;
        
    let insertHere = document.getElementById('writeroot');
    insertHere.parentNode.insertBefore(newFields,insertHere);

}

//Function to toggle legal entity for Lender2
function filterForm0() {
 
  if(document.getElementById('legalEntity0').checked) {
    //hide individual contnet
const IndividualContent = document.getElementById("ic0");
IndividualContent.classList.add("hide");
const legalEntityContent = document.getElementById("lec0");
legalEntityContent.classList.remove("hide");
console.log('nope');
  }else  {
    const legalEntityContent = document.getElementById("lec0");
    legalEntityContent.classList.add("hide");
    const IndividualContent = document.getElementById("ic0");
IndividualContent.classList.remove("hide");
    console.log('bange');
  }
}

//Function to toggle legal entity for Lender3
function filterForm1() {
 
  if(document.getElementById('legalEntity1').checked) {
    //hide individual contnet
const IndividualContent = document.getElementById("ic1");
IndividualContent.classList.add("hide");
const legalEntityContent = document.getElementById("lec1");
legalEntityContent.classList.remove("hide");
console.log('nope2');
  }else  {
    const legalEntityContent = document.getElementById("lec1");
    legalEntityContent.classList.add("hide");
    const IndividualContent = document.getElementById("ic1");
IndividualContent.classList.remove("hide");

    console.log('bange2');
  }
}



function showContent() {
  var temp = document.getElementsByTagName("template")[0];
  var clon = temp.content.cloneNode(true);
  document.body.appendChild(clon);
}

function updateSymbol(e){
  var selected = $(".currency-selector option:selected");
  $(".currency-symbol").text(selected.data("symbol"));
  $(".currency-amount").prop("placeholder", selected.data("placeholder"));
  $('.currency-addon-fixed').text(selected.text());
}

$(".currency-selector").on("change", updateSymbol);

updateSymbol();
Deji James
  • 367
  • 6
  • 20
  • You can use event delegation so that your events can be sertup before the elements exist. See [this question](https://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements) for a lot more info / solution. – freedomn-m Oct 11 '21 at 07:45

0 Answers0