Skip to content

Having trouble getting inside an .each function that finds checkboxes

I’ve used similar code earlier in the application and it works, but for some reason, I cannot get anything inside the .each function here to fire.

I have an application where you can check a membership checkbox to apply a 10% credit to the premium of a premise. The number of premises is dynamic, so when you check the membership box, the javascript creates a premise checkbox for each user-created premise on the page. No problem there.

But, I need to find the label for each premise that is checked under the membership box, and my code is failing. The alerts inside that .each do not fire. I’ve rewritten it to go Div by Div to reach those checkboxes, but I still cannot reach it.

HTML

<div class="form-check creditChecks">
    <input class="form-check-input creditCheckInput" type="checkbox" value='4' id="Membership">
    <label class="form-check-label" for="Membership">Association Membership</label>
    <div class="creditPremiseSelect">
        <div class="form-check">
            <input class="form-check-input creditPremiseInput" type="checkbox" value='1' id="MembershipcreditPrem1">
             <label class="form-check-label" for="MembershipcreditPrem1">Premise #1</label>
         </div>
    </div>

Javascript to append more premise checkboxes:

//Populate Credit/Debit Premise Selector
function loadSelectPrems(ele){
    var firedInput = ele;
    var inputID = ele.attr('id');
    var thisDiv = firedInput.closest('.creditChecks');
    var selector = thisDiv.find('.creditPremiseSelect');
    
     //Empty selector
     selector.empty();
     //Find all Premises on Policy
    $('.premiseList').find('.premise').each(function(index){
        var premiseID = $(this).find('.premiseNum').text();
        var premNum = index+1;
        selector.append($(`
            <div class='form-check'>
                <input class='form-check-input creditPremiseInput' type='checkbox' value='`+premNum+`' id='`+inputID+`creditPrem`+premNum+`'>
                <label class='form-check-label' for='`+inputID+`creditPrem`+premNum+`'>`+premiseID+`</label>
            </div>
            `))
            
    });
    
}

JQuery that isn’t working as expected:

        if($('#Membership').is(':checked')){
        doc.text(25, lineCount, 'Association Membership Credit 10% applied to:');
        updateLine('s');
        alert("Membership checked"); //This alert fires
        $(this).closest('.creditChecks').find('.creditPremiseInput').each(function(){
            alert("Looking at premises"); //This alert does not fire
            if($(this).is(':checked')){
                alert("Found checked premise");
                var labeltxt = $(this).closest('.creditPremiseSelect').find('.form-check-label').text();
                doc.text(30, lineCount, labeltxt);
                updateLine('s');
            }
        });
        updateLine('n');
    }

Answer

I’m going to go out on a limb and say the error is on this line:

$(this).closest('.creditChecks').find('.creditPremiseInput').each...

It appears you are referencing $(this) as being $(‘#Membership’), but it isn’t. Also, as you’ve assigned a singular ID $('#Membership'), I think you probably just need to access $('.creditChecks') directly in that line.

if ($('#Membership').is(':checked')) {
  doc.text(25, lineCount, 'Association Membership Credit 10% applied to:');
  updateLine('s');
  alert("Membership checked"); //This alert fires
  $('.creditChecks').find('.creditPremiseInput').each(function() {
    alert("Looking at premises"); //This alert does not fire
    if ($(this).is(':checked')) {
      alert("Found checked premise");
      var labeltxt = $(this).closest('.creditPremiseSelect').find('.form-check-label').text();
      doc.text(30, lineCount, labeltxt);
      updateLine('s');
    }
  });
  updateLine('n');
}