Возможно ли это с помощью оповещения в jquery и / или javascript?

#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 блок прямо в конце.