2012-07-19 1 views
6

は、私はそうのように最初に依存して2番目のイベントをトリガしようとしている:jqueryトリガイベントの完了を検出するにはどうすればよいですか?

... 
$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
}); 

2番目のイベントをトリガーしようとする前に完了するために、最初のトリガを待っていません。最初のトリガーが完了するのを待つことは可能ですか?関数は、いくつかの間隔の後に実行されるようにあなたは、JavaScriptのsetTimeoutを()関数を使用することができます

$('#productFamilyId').trigger('change', function() { 
    $('#productId').val(data.contents.product); 
    setTimeout(function(){ 
     $('#productId').trigger('change'); 
    },1); 
}); 

答えて

1

トリガー方式のコールバックはありません。余分なパラメータは単なるパラメータです。

​​

あなたが実際にやっていることは第二の機能でコードを実行して、トリガによって呼び出されるイベントハンドラにパラメータとして結果を渡しています。最初のイベントのイベントハンドラ内で2番目のイベントをトリガする必要があります。

2

おそらくあなたはこれをしたいです。

$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change', function() { 
setTimeout(function(){  
$('#productId').val(data.contents.product); 
    $('#productId').trigger('change'); 
},100); 
}); 
1

+0

@Archerあなたに電話してくれてありがとう、仲間ありがとう:P – Shreedhar

1

イベントハンドラが非同期コールを実行しない場合、トリガされたイベントが実行されて終了し、その後のみ次の行に移動します。非同期呼び出しあなたがこれを行うことができますイベントハンドラで(setTimeoutを、アヤックスなど)を備えたJsFiddle

$('#productFamilyId').val(data.contents.productfamily); 
$('#productFamilyId').trigger('change'); 
// Execute after change complete 
$('#productId').val(data.contents.product); 
$('#productId').trigger('change'); 

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'); 
}); 
関連する問題