9

次のように、最初のイベントに依存する2番目のイベントをトリガーしようとしています:

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

2 番目のイベントをトリガーしようとする前に、最初のトリガーが完了するのを待機していません。最初のトリガーが完了するまで待つことはできますか?

4

4 に答える 4

2

おそらくあなたはこれが欲しい:

$('#productFamilyId').trigger('change', function() {
   $('#productId').val(data.contents.product);
   setTimeout(function(){ 
      $('#productId').trigger('change'); 
   },1);
});
于 2012-07-19T15:49:00.567 に答える
2

イベント ハンドラーが非同期呼び出しを実行しない場合、トリガーされたイベントが実行されて終了し、その後で次の行に移動します。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');
});
于 2016-06-09T14:44:38.140 に答える
2

関数が一定の間隔で実行されるように、javascripts setTimeout() 関数を使用できます。

$('#productFamilyId').val(data.contents.productfamily);
$('#productFamilyId').trigger('change', function() {
setTimeout( function(){       
$('#productId').val(data.contents.product);
    $('#productId').trigger('change');
},100);
});
于 2012-07-19T15:50:04.843 に答える
1

トリガー メソッドのコールバックはありません。追加のパラメーターはまさにそのパラメーターです。

http://api.jquery.com/trigger/

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

于 2012-07-19T16:02:02.443 に答える