Можно ли «провести» мероприятие для последующей стрельбы? - PullRequest
4 голосов
/ 02 ноября 2011

Я пытаюсь сделать следующее: когда пользователь нажимает кнопку отмены или перемещается по странице через ссылку или пункт меню, я проверяю, есть ли несохраненные изменения.Если так, я спрашиваю пользователя, хочет ли он сохранить.Я не могу сделать это с окном подтверждения javascript, потому что у меня иногда есть более двух вариантов, поэтому я не могу «удерживать» все, пока пользователь не сделает выбор, как подтвердил бы.Поэтому я хотел «сохранить» событие, отменить его текущее выполнение, подождать, пока пользователь не примет решение, затем предпринять необходимые действия в соответствии с его ответом, а затем вызвать исходное событие.Итак, в качестве примера кода того, что я подумал: у меня есть этот кусок кода:

var executingEvent;
function someFunction() {
    ...
    if(existUnsavedChanges) {
        showConfirmMessage();
        executingEvent = window.event;
        if (executingEvent.stopPropagation) { executingEvent.stopPropagation(); } else { executingEvent.cancelBubble = true; }
        ...
    }
}

Есть ли способ позже сделать что-то подобное?

raise (executingEvent);

Звучитнемного сложнее, я также приветствовал бы другие варианты:)

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

для запуска события используйте

elem.dispatchEvent(event)

Где elem это либо элемент, который вы привязали к нему или под ним в DOM (поэтому он всплывает).

Конечно, если вы уже остановили распространение, событие не будет пузыриться, поэтому вы можете вместо этого создать новый объект события.

var ev = document.createEvent("Event");
ev.initEvent(type, true, true);
ev.origEv = originalEvent;
elem.dispatchEvent(ev);
0 голосов
/ 02 ноября 2011

Для меня это звучит так, как будто вы слишком задумывались - вы можете просто вызвать событие того же типа, что и исходное событие (которое вы бы отменили), как только пользователь выполнит действие, которое вы запросили.

Вы можете определить исходное событие, проверив свойства объекта события, например, тип события, исходная цель и т. д.

...