0

I have a button that spawn a selector and a div, both with unique IDs. I'm trying to get the value from one of these unique appended selectors with a JQuery function. So far I can get the value from the selector option and show in the div, but it shows in every other div that was spawned. I want to show only in the div related to the selector.

$(document).on('click', '#createNewLayer', function () {
      $('#mainSeparator').append(
        '<div id="newLayer" class="newLayer"> <div class="form-row"> <div class="form-group col-md-6"> <select class="form-control mySelector" id="selector"> <option hidden disabled selected value>Select an option</option> <option>1</option> <option>2</option> <option>3</option><option>4</option> </select> </div></div><div class="newDiv"></div></div>'
      );
});

$(document).on('change', '.mySelector', function () {
  var str = $(this).find('option:selected').map(function () {
    return $(this).text();
  }).get().join('');
  $('.newDiv').text(str);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="mainSeparator">
  <div id="newLayer" class="newLayer">        
    <div class="form-row">
      <div class="form-group col-md-6">
        <select class="form-control mySelector" id="selector">
          <option hidden disabled selected value>Select an option</option>
          <option>1</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
        </select>
      </div>
    </div>
    <div class="newDiv"></div>
  </div>      
</div>
<button type="button" class="btn btn-primary" id="createNewLayer" style="margin-top: 20px;">New Layer</button>

1 Answer 1

1

You have to switch $('.newDiv').text(str) with $(this).closest('.newLayer').find('.newDiv').text(str);

Problem is that you are not targeting a specific $('.newDiv') but all of them.

Working demo

$(document).on('click', '#createNewLayer', function() {
  $('#mainSeparator').append(
    '<div id="newLayer" class="newLayer"> <div class="form-row"> <div class="form-group col-md-6"> <select class="form-control mySelector" id="selector"> <option hidden disabled selected value>Select an option</option> <option>1</option> <option>2</option> <option>3</option><option>4</option> </select> </div></div><div class="newDiv"></div></div>'
  );
});

$(document).on('change', '.mySelector', function() {
  var str = $(this).find('option:selected').map(function() {
    return $(this).text();
  }).get().join('');
  $(this).closest('.newLayer').find('.newDiv').text(str);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="mainSeparator">
  <div id="newLayer" class="newLayer">
    <div class="form-row">
      <div class="form-group col-md-6">
        <select class="form-control mySelector" id="selector">
          <option hidden disabled selected value>Select an option</option>
          <option>1</option>
          <option>2</option>
          <option>3</option>
          <option>4</option>
        </select>
      </div>
    </div>
    <div class="newDiv"></div>
  </div>
</div>
<button type="button" class="btn btn-primary" id="createNewLayer" style="margin-top: 20px;">New Layer</button>

Sign up to request clarification or add additional context in comments.

1 Comment

I figured what I should do, but I had no idea how. Thank you very much!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.