change()イベントハンドラーのロジックは、によって値が設定されている場合は実行されval()ませんが、ユーザーがマウスで値を選択した場合は実行されます。どうしてこれなの?
<select id="single">
    <option>Single</option>
    <option>Single2</option>
</select>
<script>
    $(function() {
        $(":input#single").change(function() {
           /* Logic here does not execute when val() is used */
        });
    });
    $("#single").val("Single2");
</script>