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'); }
Advertisement
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'); }