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