イベント ハンドラーが非同期呼び出しを実行しない場合、トリガーされたイベントが実行されて終了し、その後で次の行に移動します。Jsフィドル
$('#productFamilyId').val(data.contents.productfamily);
$('#productFamilyId').trigger('change');
// Execute after change complete
$('#productId').val(data.contents.product);
$('#productId').trigger('change');
イベントハンドラーで非同期呼び出し(setTimeOut、Ajax など) を使用すると、次のことができます: JsFiddle
イベント ハンドラーにパラメーターとしてコールバック関数を追加します。
$("#productFamilyId").change(function(e, callback) {
// Simulating ajax
setTimeout(function() {
if (typeof callback === "function")
callback();
}, 3000);
});
そして、次のようにトリガーします。
$('#productFamilyId').trigger('change', function() {
$('#productId').val(data.contents.product);
$('#productId').trigger('change');
});