The trigger part(trigger('change')) causing the issue since you are triggering change event programmatically it will trigger the change event handler of that element so it happening repeatedly(since there you are triggering in both handler).
To fix it trigger only when the value is non-empty string.
$('#SelectedFruit').on('change', function (e) {
if(this.value !== '')
$('#SelectedVegetable').val('').trigge('change');
});
$('#SelectedVegetable').on('change', function (e) {
if(this.value !== '')
$('#SelectedFruit').val('').trigge('change');
});
$('#example1,#example2').select2({
placeholder: 'Select a month'
});
$('#example1').on('change', function() {
if (this.value !== '')
$('#example2').val('').change();
})
$('#example2').on('change', function() {
if (this.value !== '')
$('#example1').val('').change();
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://rawgit.com/select2/select2/master/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://rawgit.com/select2/select2/master/dist/js/select2.js"></script>
<select id="example1" style="width: 300px">
<option value=""></option>
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
<select id="example2" style="width: 300px">
<option value=""></option>
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
Or alternate approach is to re-initialize select2 after updating value.
$('#SelectedFruit').on('change', function (e) {
$('#SelectedVegetable').val('').select2('destroy').select2();
});
$('#SelectedVegetable').on('change', function (e) {
$('#SelectedFruit').val('').select2('destroy').select2();
});
$('#example1,#example2').select2({
placeholder: 'Select a month'
});
$('#example1').on('change', function() {
$('#example2').val('').select2('destroy').select2();
})
$('#example2').on('change', function() {
$('#example1').val('').select2('destroy').select2();
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://rawgit.com/select2/select2/master/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://rawgit.com/select2/select2/master/dist/js/select2.js"></script>
<select id="example1" style="width: 300px">
<option value=""></option>
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
<select id="example2" style="width: 300px">
<option value=""></option>
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
Reference : How to set selected value of jquery select2?