Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   передать событие (https://javascript.ru/forum/jquery/58597-peredat-sobytie.html)

mrkid 30.09.2015 15:33

передать событие
 
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 с реверсом)

mrkid 30.09.2015 18:39

немного изменил функции. проблема теперь не в событиях(наверное), а в том, что 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();
                        }
                    }
                }
            });
        });

mrkid 30.09.2015 19:00

решение найдено: async: false,

sortarray 30.09.2015 19:13

Цитата:

Сообщение от mrkid
решение найдено: async: false,

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

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


Часовой пояс GMT +3, время: 23:52.