There is always a value in the selection box. If you do not manually change the default value, you still have the value. To check for explicit changes, as you say, you can track change :
$('#select').change(function() { $(this).data('changed', true); });
So your condition:
if(!!$('#select').data('changed')) { ... }
A more common way to achieve something like this would be to insert a placeholder value at the top:
<option value="0">Please select one item</option>
... and check
$('#select').val() == '0'
If you need to find out if the selection was changed from its original value, i.e. the test described above, but make sure that the user does not switch to the default value, you just save the original value when loading the page
$('#select').data('original-value', $('#select').val());
And check
$('#select').val() != $('#select').data('original-value');
David Hedlund
source share