gpt4 book ai didi

javascript - 是否可以通过代码触发 dojo 特定的事件?

转载 作者:行者123 更新时间:2023-11-28 07:56:33 28 4
gpt4 key购买 nike

我在一个基于dojo的大型web项目中遇到了一个小问题(比dojo 1.7更早的版本,据我所知它是1.3)。我想通过代码触发特定事件,但不知道如何实现这一点。这是一个名为 ondijitclick 的事件,它通过 html 中的 data-dojo-attach-event 属性注册。我也不能只调用此事件触发的方法,因为我只能在需要此功能的位置访问 domnodes(或者我只是不知道如何访问属于此 domnodes 的对象)。

我还有代码,至少可以触发“onclick”等常见事件:

        if (document.createEventObject){
// IE
var evt = document.createEventObject();
node.fireEvent('onclick', evt);
}
else{
// other browsers
var evt = document.createEvent("HTMLEvents");
evt.initEvent('click', true, true );
node.dispatchEvent(evt);
}

我可以输入 ondijitclick 事件,但什么也没有发生,也没有显示任何错误。 Visual Studio(带有 ReSharper)本身告诉我此事件无法解决。因此,我认为不会触发任何事件,并且由于未知的事件类型而忽略命令。

最后的整个问题是:是否存在一种通过 dojo 1.3 的代码(或 dojo 1.7 之前的版本的通用)触发此类事件的方法?

编辑:澄清需要 dojo 1.3 的解决方案

最佳答案

模块dojo/Evented是一个可以用作 mixin 或基类的类,用于将 on()emit() 方法添加到类中以监听事件和发出事件。

例如

define(["dojo/_base/declare","dojo/Evented", "dojo/Stateful"
], function(declare, Evented, Stateful){
var EventedStateful = declare([Evented, Stateful], {...});
var instance = new EventedStateful();
instance.on("open", function(event){
//... do something with event
});

instance.emit("open", {name:"some event", ...});

在您的示例中,您有一个小部件连接到 ondijitclick 而不是 onclick (为了可访问性),请参阅 dijit._OnDijitClickMixin 。您可以使用 "dojo/on" 中的 emit() 方法, emit() 方法提供了一种用于分派(dispatch)事件的规范化机制。

适用于旧版本的 dojo 测试。

        var element= dojo.byId("myElement");
// IE does things differently
if (dojo.isIE)
{
element.fireEvent("ondijitclick");
}
else
{ // Not IE
var event = document.createEvent("HTMLEvents");
event.initEvent("ondijitclick", false, true);
console.debug(event);
element.dispatchEvent(event);
}

关于javascript - 是否可以通过代码触发 dojo 特定的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26015062/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com