Javascript:取消或让活动继续进行?

Mat*_*att 3 javascript events dom-events kendo-ui

我的场景涉及 Kendo UI,但我认为它可能通常适用于 JavaScript,因此使用 JavaScript 标签。

我有一个 Kendo 调度程序,其编辑事件选项设置为 functionA。

在 functionA 中,我创建了一个 Kendo 窗口(基本上是一个模态窗口)来询问用户一个问题;在一种情况下,编辑事件应该继续并冒泡,就好像模式从未存在过一样,在另一种情况下,它应该防止默认并返回。

问题在于模式是非阻塞的,因此确认模式出现,但事件逻辑继续并冒泡到编辑器的内置编辑事件。

如何捕获并暂停当前事件,并且仅在从 Kendo 窗口中获得所需结果时才继续?

我知道由于 JavaScript 的单线程特性,我不能也不应该阻止 Kendo 窗口,但是有没有办法暂停此事件,并且只有在我这么说时才恢复它。

基本上,我想做一些类似 a 的事情,event.Hold()如果满足条件,event.Resume()则执行 ,否则执行event.preventDefault()

aec*_*end 5

更新

我测试了之前发布的代码,发现它不能正常工作。这已经过测试并且完全按照您想要的方式工作,而且它是一个简单的解决方案:

var event_store;

function handle_click(event) {
    event.stopPropagation();
    event_store = event;

    //Open the modal here
    //If it's possible, pass the event pointer to the modal's confirm callback
    //instead of using event_store and pass that pointer to fire_event() when
    //it's confirmed
}

function confirm_handle() {
    resume_event("click");
}

function resume_event(type) {
    if (event_store.target.parentNode) {
        var event;

        if (document.createEvent) {
            event = document.createEvent("HTMLEvents");
            event.initEvent(type, true, true);
        } else {
            event = document.createEventObject();
            event.eventType = type;
        }

        event.eventName = type;

        if (document.createEvent) { //Not IE
            event_store.target.parentNode.dispatchEvent(event);
        } else { //IE
            event_store.target.parentNode.fireEvent("on" + event.eventType, event);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以前的

您可以使用类似的方法来“暂停”事件冒泡。当调用单击处理程序并将 show_modal 变量设置为 false 时,它​​会取消事件传播并显示模态。确认 fire_event() 被调用并触发原始事件,这次不显示模态,然后将 show_modal 重置回 true。如果用户未确认模式,您还应该将 show_modal 恢复为 true。

var show_modal = true;
var event_store;

function handle_click(event) {
    event.stopPropagation();
    event_store = event;

    show_modal = !show_modal;
    if (show_modal) {
        //Open the modal here
        //If it's possible, pass the event pointer to the modal's confirm callback
        //instead of using event_store and pass that pointer to fire_event() when
        //it's confirmed
    }
}

function fire_event() {
    if (document.createEvent) { //Not IE
        element.dispatchEvent(event_store);
    } else { //IE
        element.fireEvent("on" + event_store.eventType, event_store);
    }
}
Run Code Online (Sandbox Code Playgroud)