编程语言
首页 > 编程语言> > JavaScript:取消还是让事件继续?

JavaScript:取消还是让事件继续?

作者:互联网

我的方案涉及Kendo UI,但我认为它可能通常适用于JavaScript,因此适用于JavaScript标签.

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

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

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

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

我知道由于JavaScript的单线程性质,我不能也不应使Kendo窗口阻塞,但是有一种方法可以搁置此事件,只有在我这样说的情况下才恢复.

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

解决方法:

更新

我测试了之前发布的代码,发现它无法正常运行.它已经过测试,可以完全按照您的要求运行,另外还有解决方案:

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);
        }
    }
}

以前

您可以使用类似的方法来“暂停”事件冒泡.当调用单击处理程序时,它将取消事件传播并显示模式,并将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);
    }
}

标签:javascript,events,javascript-events,kendo-ui
来源: https://codeday.me/bug/20191011/1892748.html