Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.09.2015, 15:33
Интересующийся
Отправить личное сообщение для mrkid Посмотреть профиль Найти все сообщения от mrkid
 
Регистрация: 16.08.2015
Сообщений: 18

передать событие
function reverse(event, ui){
            //alert("reverse");
            $(".drag").draggable({
                revert:true,
                stop: function( event, ui ) {
                    $(".drag").draggable({revert:false})
                }
            });
        }
 
        $(function() {
            var id;     
            var carType;  
 
            var save_event;   //пробовал сохранить :)
            var save_ui;
 
            $(".drag").draggable({
                cursor: "move",
                drag: function(event, ui) { }
            });
            $(".drop").droppable({
                start: function(event, ui) { },
                hoverClass: "red",
                drop: function( event, ui ) {
                    save_event = event;
                    save_ui = ui;
                    id = ui.draggable.attr('id');
                    carType = $(this).attr("data-carType");
                    var list = $(this).find('img');
                    if(list.length > 0){
                        reverse(event, ui)
                    }
                    else
                    {
                        $(this).css("background","green");
                        $.ajax({
                            type: "POST",
                            url: "${createLink(controller: 'ajaxActions', action: 'checkRoute')}/?carType=" + carType,
                            success: function (response, event, ui) {
                                //alert("response = "+response);
                                if(response == "CONTINUE")
                                {
                                    formRouteOpen (event);
                                    loadRoutes(carType, id)
                                }
                                if(response == "ONEROUTE")
                                {
                                    $.ajax({
                                        type: "POST",
                                        url: "${createLink(controller: 'ajaxActions', action: 'changeRoute')}/" + id + "?carType=" + carType,
                                        success: function (response) {
                                            if (response == "OK") {
                                                location.reload()
                                            }
                                        }
                                    });
                                }
                                if(response == "NOROUTE")
                                {
                                    //alert("NOROUTE");
                                    reverse(event, ui)
                                }
                            }
                        });
                    }
                }
            });
        });


при первом вызове функции reverse она отрабатывает как надо
if(list.length > 0){
                        reverse(event, ui)
                    }

а вот внутри ajax событие теряется, видимо. Можно ли туда как-то передать то событие. Фишка в чем: я перемещаю объект. и в пункте назначения делаю ajax запрос, в зависимости от него, у меня либо выполняется функция возврата объекта в исходное место, либо нет. а чтобы вернуть, нужно событие откуда начали перетаскивать. (может, конечно, что-то недопонимаю. реализую функцию drag&drop с реверсом)
Ответить с цитированием
  #2 (permalink)  
Старый 30.09.2015, 18:39
Интересующийся
Отправить личное сообщение для mrkid Посмотреть профиль Найти все сообщения от mrkid
 
Регистрация: 16.08.2015
Сообщений: 18

немного изменил функции. проблема теперь не в событиях(наверное), а в том, что ajax не успевает выполниться и проверка if(reverseStatus) проходит быстрее ajax-запроса. вопрос теперь в том, как сделать "задержку" на дальнейшее выполнение скрипта или что-то типа того?

function reverse(){
            alert("reverse");
            $(".drag").draggable({
                revert:true,
                stop: function(  ) {
                    $(".drag").draggable({revert:false})
                }
            });
        }

        $(function() {
            var id;     //id заявки
            var carType;  //данные для отрисовки машины

            var save_event;
            var save_ui;
            var reverseStatus = false;

            $(".drag").draggable({
                cursor: "move",
                drag: function(event, ui) { }
            });
            $(".drop").droppable({
                start: function(event, ui) { },
                hoverClass: "red",
                //tolerance: 'fit',
                drop: function( event, ui ) {
                    save_event = event;
                    save_ui = ui;
                    id = ui.draggable.attr('id');
                    carType = $(this).attr("data-carType");
                    var list = $(this).find('img');
                    if(list.length > 0){
                        reverse();
                    }
                    else
                    {
                        $(this).css("background","green");
                        $.ajax({
                            type: "POST",
                            url: "${createLink(controller: 'ajaxActions', action: 'checkRoute')}/?carType=" + carType,
                            success: function (response) {
                                //alert("response = "+response);
                                if(response == "CONTINUE")
                                {
                                    formRouteOpen (event);
                                    loadRoutes(carType, id)
                                }
                                if(response == "ONEROUTE")
                                {
                                    $.ajax({
                                        type: "POST",
                                        url: "${createLink(controller: 'ajaxActions', action: 'changeRoute')}/" + id + "?carType=" + carType,
                                        success: function (response) {
                                            if (response == "OK") {
                                                location.reload()
                                            }
                                        }
                                    });
                                }
                                if(response == "NOROUTE")
                                {
                                    alert("NOROUTE");
                                    reverseStatus = true;
                                }
                                alert("reverseStatus1 = "+reverseStatus);
                            }
                        });
                        alert("reverseStatus3 = "+reverseStatus);
                        if(reverseStatus)
                        {
                            alert("reverseStatus2 = "+reverseStatus);
                            reverse();
                        }
                    }
                }
            });
        });
Ответить с цитированием
  #3 (permalink)  
Старый 30.09.2015, 19:00
Интересующийся
Отправить личное сообщение для mrkid Посмотреть профиль Найти все сообщения от mrkid
 
Регистрация: 16.08.2015
Сообщений: 18

решение найдено: async: false,
Ответить с цитированием
  #4 (permalink)  
Старый 30.09.2015, 19:13
Кандидат Javascript-наук
Отправить личное сообщение для sortarray Посмотреть профиль Найти все сообщения от sortarray
 
Регистрация: 19.09.2015
Сообщений: 117

Сообщение от mrkid
решение найдено: async: false,
это решение не для чОтких посанов. если ответ сервера не придет вовремя, поток будет заблокирован, и Ваш юзер потеряет интерактивность. Использование синхронного кода в JS -- моветон. Это конечно, от задачи зависит, но вообще, если хотите синхронизации событий, посмотрите в сторону промисов/генераторов.

ЗЫ Код Ваш разгребать сил нет, поэтому ничего конкретного сказать не могу, сорри
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие click Гробовщик jQuery 1 31.07.2013 07:28
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
javascript вставки в vrml сцены. Передать событие из броузера Proletariy Javascript под браузер 0 10.05.2011 12:26
Передать обработчику событие + замкнутый аргумент poorking Общие вопросы Javascript 1 26.02.2011 04:29
Как в событие объекта передать свойство метода DVVID Events/DOM/Window 8 22.02.2010 12:30