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');
});