Add/Remove Select Fields Dynamically with jQuery

Hi i’ve managed to use jquery to add a new text field when I press the “add” button but when I try with a select box which get the options from a database mysql using php it doesn’t work. I hope someone could help me please. Many thanks

This is my javascript code

$(document).ready(function(){
    //group add limit
    var maxGroup = 5;
    
    //add more fields group
    $(".addMore").click(function(){
        
        if($('body').find('.fieldGroup').length < maxGroup){

            var fieldHTML = '<div class="form-group fieldGroup">'+$(".fieldGroupCopy").html()+'</div>';
            $('body').find('.fieldGroup:last').after(fieldHTML);

        }else{

            alert('Hai raggiunto il massimo numero di immobili registrabili di '+maxGroup+'');

        }
    });
    
    //remove fields group
    $("body").on("click",".remove",function(){ 
        $(this).parents(".fieldGroup").remove();
    });
});

Can you show the code for this, please, so we can try to see where it might have gone wrong?

Hi thanks for your help, this is the html code including the dropdown menu, sorry is a long code

<div class="tab-pane" id="tab2">
            
    <div class="form-group fieldGroup">

      <h3 class="form-section ">Dati catastali immobile del cliente</h3>

      <div class="row">
        <div class="col-md-6">
          <div class="form-group">
              <label class="control-label">Condominio Cliente
              <span class="required"> * </span>
              </label>
              
              <select class="form-control bs-select" id="userGruppo" name="userGruppo" required>
                  <option value="">Seleziona condominio</option>

                  <?php 

                    $select_group_query="SELECT group_id, group_name FROM user_group";  
                    $run=mysqli_query($conn, $select_group_query);
                    
                    while($row=mysqli_fetch_array($run)) {     
                        
                      echo "<option value= '".$row['group_id']."' >" . $row['group_name'] . "</option>";
                        
                    }
                  
                  ?>  

              </select>
    
          </div>
 
      </div>
  </div>

        <div class="row">

          <div class="col-md-6">
            <div class="form-group">
            <label class="control-label">Ubicazione</label>
            <input type="text" id="ubicazione" name="ubicazione[]" placeholder="Ubicazione dell'immobile" class="form-control" /> 
            </div>
          </div>
          <div class="col-md-2">
            <div class="form-group">
              <label class="control-label">Piano</label>
              <input type="text" id="piano" name="piano[]" placeholder="Piano dell'immobile" class="form-control" /> 
            </div>
          </div>
          <div class="col-md-2">
            <div class="form-group">
              <label class="control-label">Scala</label>
              <input type="text" id="scala" name="scala[]" placeholder="Scala dell'immobile" class="form-control" /> 
            </div>
          </div>
          <div class="col-md-2">
            <div class="form-group">
              <label class="control-label">Interno</label>
              <input type="text" id="interno" name="interno[]" placeholder="Interno dell'immobile" class="form-control" /> 
            </div>
          </div>

        </div>

        <div class="row">

          <div class="col-md-6">
              <div class="form-group">
                  <label class="control-label">Iscritto al catasto urbano del comune
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="catasto" class="form-control" placeholder="Specifica comune del catasto urbano" name="catasto[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Sezione 
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="sezione" class="form-control" placeholder="Sezione del catasto urbano" name="sezione[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Foglio
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="foglio" class="form-control" placeholder="Foglio" name="foglio[]">
                  </div>             
              </div>
          </div>

        </div>

        <div class="row">

          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Part. / Mapp.
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="particella" class="form-control" placeholder="Particella" name="particella[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Sub.
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="sub" class="form-control" placeholder="Sub." name="sub[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Cat.
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="cat" class="form-control" placeholder="Cat." name="cat[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Classe
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="classe" class="form-control" placeholder="Classe" name="classe[]">
                  </div>             
              </div>
          </div>

        </div>

        <div class="row">

          <div class="col-md-12">
              <div class="form-group">
                  <label class="control-label">Destinazione d'uso dell'immobile
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="destinazione" class="form-control" placeholder="Destinazione d'uso dell'immobile" name="destinazione[]">
                  </div>             
              </div>
          </div>

        </div>

    </div>

          <div class="row">

          <div class="col-md-1">
              <div class="form-group">
           
             <a href="javascript:void(0)" data-repeater-create class="btn btn-success addMore">
              <i class="fa fa-plus"></i> Aggiungi altro immobile</a>           
              </div>
          </div>

        </div>

<!-- copy of input fields group -->
<div class="form-group fieldGroupCopy" style="display: none;">

  <h3 class="form-section ">Dati catastali immobile del cliente</h3>

      <div class="row">

        <div class="col-md-2 pull-right">
          <div class="form-group">

            <a href="javascript:void(0)" class="btn red btn-outline remove"><span class="glyphicon glyphicon glyphicon-remove" aria-hidden="true"></span> Elimina Tabella </a>
            
          </div>
        </div>

      </div>
        <div class="row">
          <div class="col-md-6">
          <div class="form-group">
              <label class="control-label">Condominio Cliente
              <span class="required"> * </span>
              </label>
              
              <select class="form-control bs-select" id="userGruppo" name="userGruppo" required>
                  <option value="">Seleziona condominio</option>

                  <?php 

                    $select_group_query="SELECT group_id, group_name FROM user_group";  
                    $run=mysqli_query($conn, $select_group_query);
                    
                    while($row=mysqli_fetch_array($run)) {     
                        
                      echo "<option value= '".$row['group_id']."' >" . $row['group_name'] . "</option>";
                        
                    }
                  
                  ?>  

              </select>
    
          </div>
 
      </div>
  </div>


      <div class="row">

          <div class="col-md-6">
            <div class="form-group">
            <label class="control-label">Ubicazione</label>
            <input type="text" id="ubicazione" name="ubicazione[]" placeholder="Ubicazione dell'immobile" class="form-control" /> 
            </div>
          </div>
          <div class="col-md-2">
            <div class="form-group">
              <label class="control-label">Piano</label>
              <input type="text" id="piano" name="piano[]" placeholder="Piano dell'immobile" class="form-control" /> 
            </div>
          </div>
          <div class="col-md-2">
            <div class="form-group">
              <label class="control-label">Scala</label>
              <input type="text" id="scala" name="scala[]" placeholder="Scala dell'immobile" class="form-control" /> 
            </div>
          </div>
          <div class="col-md-2">
            <div class="form-group">
              <label class="control-label">Interno</label>
              <input type="text" id="interno" name="interno[]" placeholder="Interno dell'immobile" class="form-control" /> 
            </div>
          </div>

        </div>

        <div class="row">

          <div class="col-md-6">
              <div class="form-group">
                  <label class="control-label">Iscritto al catasto urbano del comune
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="catasto" class="form-control" placeholder="Specifica comune del catasto urbano" name="catasto[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Sezione 
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="sezione" class="form-control" placeholder="Sezione del catasto urbano" name="sezione[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Foglio
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="foglio" class="form-control" placeholder="Foglio" name="foglio[]">
                  </div>             
              </div>
          </div>

        </div>

        <div class="row">

          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Part. / Mapp.
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="particella" class="form-control" placeholder="Particella" name="particella[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Sub.
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="sub" class="form-control" placeholder="Sub." name="sub[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Cat.
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="cat" class="form-control" placeholder="Cat." name="cat[]">
                  </div>             
              </div>
          </div>
          <div class="col-md-3">
              <div class="form-group">
                  <label class="control-label">Classe
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="classe" class="form-control" placeholder="Classe" name="classe[]">
                  </div>             
              </div>
          </div>

        </div>

        <div class="row">

          <div class="col-md-12">
              <div class="form-group">
                  <label class="control-label">Destinazione d'uso dell'immobile
                  </label>
                  <div class="input-icon">
                      <i class="fa fa-lock"></i>       
                      <input type="text" id="destinazione" class="form-control" placeholder="Destinazione d'uso dell'immobile" name="destinazione[]">
                  </div>             
              </div>
          </div>

        </div>
        
</div>


</div>

Can you expand on what doesn’t work? I thought you were trying to add the “select” with Ajax as you were doing with the field in your first example.

You seem to have the select code in twice, with the same id. Is that a forum post error, or have you duplicated the ids in the real code? If you do need to have it twice, I’d be tempted to run the PHP loop and build the options into a string first, then just echo it twice. And you do have some means of connecting to the database first, presumably?

Hi, i’ve got the code duplicated on purpose so when I click to the add button it does show duplicated fields and i can manke another entry. You can see what i’m trying to achieve in a demo here. The dropdown menu works fine in the first code but not on the duplicated and i think it is because there might be some thing with the javascript code maybe with the following portion.

var fieldHTML = '<div class="form-group fieldGroup">'+$(".fieldGroupCopy").html()+'</div>';
            $('body').find('.fieldGroup:last').after(fieldHTML);

I’ve tested everything without the dropdown and it works fine. Many thanks again for your help

Hmm, this is strange. I am learning JS and PHP, so I butted in originally in case there was a PHP thing I could help with. However I’ve copied and pasted your entire code into a local file, changed the database details as I don’t have your data, and mine seems to work exactly as you’d expect, in terms of drawing the drop-downs.

The only thing I can see that differs may not come into play until you actually submit the form. I just tried to add a pair of form tags and a submit button to test it out, but couldn’t get it to actually submit, so there’s obviously some other JS going on to stop that happening. However, if the problem is in the data when it is submitted, it may be because on all the other field names, you have added the array designators [] (for example name="ubicazione[]" ) but on the drop-down, you have not. I’m not sure off the top of my head whether that means it will submit the first value, or the last value, but either way you won’t get all the values.

Hi @droopsnoot many thanks for helping me. If you try to select one of the options in the duplicated dropdown does it keep the selection? Because the only problem I have now is when I duplicate the dropdown and I want to select the option it doesn’t keep it into the field after is selected. It only works for the first form but not for the added or duplicated forms. This is why i thought the problem could be in the javascript, maybe here:

+$(".fieldGroupCopy").html()

I’m not a javascript expert and i’m learning as well as you, so I might have said something stupid.

Hi @droopsnoot i’ve just found the problem. There is a conflict with bs-select plugin, in fact it works fine removing bs-select from the following code.

<select class="form-control bs-select" id="userGruppo" name="userGruppo" required>
<option value="">Seleziona condominio</option>
1 Like

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.