Ваш текущий код имеет некоторые синтаксические проблемы и использует вложенные обработчики событий, что не является хорошим шаблоном проектирования.
В терминах c вы пытаетесь построить динамический ограничитель c checkbox на основе первый флажок состояния. Для этого просто определите, установлен ли первый флажок, а затем подсчитайте количество отмеченных регионов, чтобы увидеть, превышает ли оно ограничение. Если это так, запретите текущее поле для проверки. Попробуйте это:
let $allowMulti = $('#allow_multi').on('change', function() {
if (!this.checked)
$('.region').prop('checked', false); // remove all checks if no multi allowed
});
$('.region').on('change', function() {
let selectedCount = $('.region:checked').length;
if (!$allowMulti.prop('checked') && selectedCount > 1)
$(this).prop('checked', false);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>
<label>
<input type="checkbox" id="allow_multi">
Select multiple regions
</label>
</p>
<label>
<input type="checkbox" class="region" value="1"> 1
</label>
<label>
<input type="checkbox" class="region" value="2"> 2
</label>
<label>
<input type="checkbox" class="region" value="3"> 3
</label>
<label>
<input type="checkbox" class="region" value="4"> 4
</label>