如何检测jQuery触发器事件完成

How do I detect a jQuery trigger events completion?

本文关键字:触发器 事件 jQuery 何检测 检测      更新时间:2023-11-21

我正试图根据第一个事件触发第二个事件,比如:

...
$('#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);
});

如果事件处理程序没有执行异步调用,则触发的事件将执行并完成,然后将转到下一行。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');
});

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

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

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