0

I am looking to incorporate the following id variables: e1, e2, etc. into a loop.

What is the right syntax to handle the '#e'+i and '#e'+i elements, to avoid writing multiple functions eg. : $(document).on('change', '#e1', function() { and var exp = 'e1';

PS: Currently, the below on change function is not triggered.

for (var i = 0; i < 10; i++) {      
        
$(document).ready(function() {          
              $(document).on('change', '#e'+i, function() {
                if ($("#e"+i).is(":checked")) {     var chk = $('#e'+i).val(); var exp = 'e'+i; }
                else {  chk = 0 ;   var exp = 'e'+i;    }
                $.ajax({
                        url: "modify.php",
                        method: "POST",
                        data: {check: chk, experience: exp },
                  });
              });       
            })
            ;
        }       
1
  • 5
    Don't use dynamic IDs (ever, not just to solve this issue). Use common classes instead, so you can then delegate the event to all elements matching a particular class. Commented Dec 8, 2021 at 18:56

1 Answer 1

1

You're making your life more difficult and your code too complicated. Consider this approach, which uses a class name rather than dynamic id's.

$(document).ready(function() {
  $('body').on('change', '.changeable', function() {
    let data = {
      check: $(this).is(":checked") ? $(this).val() : 0,
      experience: $(this).data('ref')
    }
    return console.log(data);
    $.ajax({
      url: "modify.php",
      method: "POST",
      data: data,
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='checkbox' data-ref="e1" class="changeable" value='val1' />
<input type='checkbox' data-ref="e2" class="changeable" value='val2' />
<input type='checkbox' data-ref="e3" class="changeable" value='val3' />

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

1 Comment

Spot on. Thank you! Kinglish and @CertainPerformance

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.