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?