When you change selected value of a dropdown with a change event handler programmatically in standard HTML, that event is not fired. For example, if I do:
document.getElementById("my_select").value = "foo";
the onchange event handler of the dropdown is not executed (it only responds to user-initiated events).
I am converting all dropdowns in my code to Semantic UI (which is a great library, BTW). However, the problem is that now the onchange event fires regardless of whether the change was initiated by user interaction or by some JS function.
So, when I do this:
$('#my_select').dropdown('set selected', 'foo');
the onchange event is fired.
Here is the fiddle that shows both behaviors:
So, my questions are:
Thanks!
To get the behaviour you desire you need to trick the system into thinking you've already selected the option you wish you select.
$(document).ready(function() {
$('.ui.dropdown').dropdown();
$('#change_button').click( function() {
//set the value to the value you want
$('#semantic_select')[0].value='3';
//now use the semantic ui function
$('#semantic_select').dropdown('set selected', '3');
});
});
<link href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js"></script>
<select id="semantic_select" class="ui dropdown" onchange="alert('Semantic Changed')">
<option value=""></option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<input id="change_button" type="button" value="Change" /><br /><br />
By setting the value, then calling the dropdown
function the system thinks you've already selected the value you're setting, so the change event doesn't fire.