我得承认,我几乎是个菜鸟,但我一直在为这件事而挣扎。我必须在两个丢弃发生后触发if,现在它在加载时触发。我错过了什么?
$(function() {
$( "#draggable" ).draggable({
revert: "invalid",
snap: "#droppable",
});
$( "#droppable" ).droppable({
accept: "#draggable",
drop: function() {
$("#whistle").get(0).play();
$(this).data(droppable)
}
});
$( "#draggable2" ).draggable({
revert: "invalid",
snap: "#droppable",
});
$( "#droppable2" ).droppable({
accept: "#draggable2",
drop: function() {
$("#whistle").get(0).play();
$(this).data(droppable2)
}
});
if ($.queue(2)) {
$("#whistle2").get(0).play();
alert ("done!")
}
});发布于 2012-10-16 19:34:53
您可以使用两个$.Deferred及其promise-objects来触发您的处理程序:
$(function() {
var dfd1 = $.Deferred();
var dfd2 = $.Deferred();
$( "#draggable" ).draggable({
revert: "invalid",
snap: "#droppable",
});
$( "#droppable" ).droppable({
accept: "#draggable",
drop: function() {
$("#whistle").get(0).play();
$(this).data(droppable);
dfd1.resolve();
}
});
$( "#draggable2" ).draggable({
revert: "invalid",
snap: "#droppable",
});
$( "#droppable2" ).droppable({
accept: "#draggable2",
drop: function() {
$("#whistle").get(0).play();
$(this).data(droppable2);
dfd2.resolve();
}
});
//this will trigger when both dfds have been resolved
$.when(dfd1.promise(), dfd2.promise()).then(function(){
$("#whistle2").get(0).play();
alert ("done!")
});
});有关演示,请参阅this fiddle (单击这两个按钮即可看到神奇的发生!)并阅读有关$.Deferred和$.when的信息
https://stackoverflow.com/questions/12913338
复制相似问题