我正试图触发第二个依赖于第一个事件的事件:
...
$('#productFamilyId').val(data.contents.productfamily);
$('#productFamilyId').trigger('change', function() {
$('#productId').val(data.contents.product);
$('#productId').trigger('change');
});
在尝试触发第二个事件之前,它不会等待第一个触发器完成。是否可以等待第一次触发完成?
答案 0 :(得分:2)
可能你想要这个:
$('#productFamilyId').trigger('change', function() {
$('#productId').val(data.contents.product);
setTimeout(function(){
$('#productId').trigger('change');
},1);
});
答案 1 :(得分:1)
你可以使用javascripts setTimeout()函数,这样函数会在一段时间后执行。
$('#productFamilyId').val(data.contents.productfamily);
$('#productFamilyId').trigger('change', function() {
setTimeout( function(){
$('#productId').val(data.contents.product);
$('#productId').trigger('change');
},100);
});
答案 2 :(得分:1)
触发方法没有回调。额外的参数就是 - 参数。
http://api.jquery.com/trigger/
您实际在做的是在第二个函数中运行代码,然后将结果作为参数传递给由trigger调用的事件处理程序。如果希望它们按顺序运行,则需要在第一个事件的事件处理程序中触发第二个事件。
答案 3 :(得分:1)
如果您的事件处理程序未执行异步调用,则触发事件将执行并完成,然后才会转到下一行。 JsFiddle
$('#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');
});