#javascript #jquery #draggable #alert #droppable
#javascript #jquery #перетаскиваемый #предупреждение #удаляемый
Вопрос:
для школьного проекта я делаю пазл из jquery и javascript. Я использую jquery и jquery impromptu jquery (пользовательские предупреждающие сообщения).
теперь проблема в том, что я хочу, чтобы сайт выдавал предупреждение, если все четыре части расположены правильно. Возможно ли это? В настоящее время он выдает сообщение для каждого правильно расположенного элемента.
код jquery:
$(function() {
$( ".draggable_l_t" ).draggable({ snap: ".droppable_l_t, .droppable_r_t, .droppable_l_b, .droppable_r_b", snapMode: "inner" });
$( ".draggable_r_t" ).draggable({ snap: ".droppable_l_t, .droppable_r_t, .droppable_l_b, .droppable_r_b", snapMode: "inner" });
$( ".draggable_l_b" ).draggable({ snap: ".droppable_l_t, .droppable_r_t, .droppable_l_b, .droppable_r_b", snapMode: "inner" });
$( ".draggable_r_b" ).draggable({ snap: ".droppable_l_t, .droppable_r_t, .droppable_l_b, .droppable_r_b", snapMode: "inner" });
$( ".droppable_l_t" ).droppable({
accept: ".draggable_l_t",
drop: function( event, ui ) {
$( this )
$.prompt('Goed geplaatst.',{ buttons: { Ok: true, Cancel: false }, focus: 1 });
}
});
$( ".droppable_r_t" ).droppable({
accept: ".draggable_r_t",
drop: function( event, ui ) {
$( this )
$.prompt('Goed geplaatst.',{ buttons: { Ok: true, Cancel: false }, focus: 1 });
}
});
$( ".droppable_l_b" ).droppable({
accept: ".draggable_l_b",
drop: function( event, ui ) {
$( this )
$.prompt('Goed geplaatst.',{ buttons: { Ok: true, Cancel: false }, focus: 1 });
}
});
$( ".droppable_r_b" ).droppable({
accept: ".draggable_r_b",
drop: function( event, ui ) {
$( this )
$.prompt('Goed geplaatst.',{ buttons: { Ok: true, Cancel: false }, focus: 1 });
}
});
});
</script>
весь сайт доступен здесь. и другие файлы находятся здесь.
не могли бы вы помочь мне с этой проблемой? заранее спасибо, Friso
Комментарии:
1. почему бы не сохранить глобальную переменную, которая увеличивается всякий раз, когда размещается успешный фрагмент. при каждом успешном выполнении увеличивайте его и смотрите, равно ли оно 4?
Ответ №1:
Вы могли бы сделать это с объектами jQuery 1.5 Deferred()
.
Создайте по одному такому объекту для каждой части:
var def = [];
for (var i = 0; i < 4; i) {
def[i] = $.Deferred();
}
Затем, когда каждая часть будет завершена, resolve
соответствующий отложенный объект:
def[n].resolve();
Затем в конце вашего кода зарегистрируйте обратный вызов, который вызывается только после того, как все они будут выполнены:
$.when.apply($, def).done(function() {
// this will be called only when all the promises are resolved
});
Комментарии:
1. Спасибо за быстрый ответ, но у меня возникли некоторые проблемы с размещением вашего кода в моем коде. У меня нет большого опыта работы с jquery. Не могли бы вы сказать мне, куда конкретно поместить код? Что мне делать с текущим оповещением (подсказкой)?
2. поместите первый блок прямо вверху,
resolve
внутри каждойdrop
функции обратного вызова иwhen
блок прямо в конце.