Javascript 如何检测jquery触发器事件完成?

Javascript 如何检测jquery触发器事件完成?,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我试图触发第二个事件,该事件依赖于第一个事件,如下所示: ... $('#productFamilyId').val(data.contents.productfamily); $('#productFamilyId').trigger('change', function() { $('#productId').val(data.contents.product); $('#productId').trigger('change'); }); 在尝试触发第二个事件之前,它不会

我试图触发第二个事件,该事件依赖于第一个事件,如下所示:

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

在尝试触发第二个事件之前,它不会等待第一个触发器完成。是否可以等待第一个触发器完成?

您可能希望:

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

您可以使用javascripts setTimeout()函数,以便该函数在某个时间间隔后执行

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

触发器方法没有回调。额外的参数只是那个参数


您实际要做的是在第二个函数中运行代码,然后将结果作为参数传递给触发器调用的事件处理程序。如果希望事件处理程序按顺序运行,则需要在第一个事件的事件处理程序中触发第二个事件。

如果事件处理程序不执行异步调用,则触发的事件将执行并完成,然后才会转到下一行

通过事件处理程序中的异步调用(setTimeOut、Ajax等),您可以执行以下操作:

在事件处理程序中添加回调函数作为参数:

$("#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');
});
$('#productFamilyId').trigger('change', function() {
    $('#productId').val(data.contents.product);
    $('#productId').trigger('change');
});