我想在使用 dojo 的 javascript 代码中模拟鼠标单击。真正的鼠标单击操作将使用 dojo-stuff 和“ondijitclick”进行注册。
我知道调用哪个方法/函数,并且我还有 dijit 对象来调用此方法。该方法需要一个函数对象作为参数,因此我正在创建一个新的 MouseEvent 对象。这一切都工作正常,除了我需要设置此事件的目标值并且我不知道如何执行此操作。这是必要的,因为稍后的异常处理正在访问目标属性,我无法避免这一点。
到目前为止我的代码:
dojo.query(".mybutton").forEach(function (node) {
var target = dojo.query(".myclass").parents("#" + node.id)[0];
var event = new MouseEvent('click', {
'view' : window,
'bubbles': true,
'cancelable': true
});
dijit.byId(node.id)._doEvent(event);
});
如果我添加以下行
'target' : target,
在 MouseEvent 创建中,不会设置该属性(但所有其他属性都会设置),并且 target-property 将为 null,但 target 本身不为 null)。
是否有可能以某种方式设置目标属性?如果可能的话我想知道我做错了什么?
Edit:
我发现了一个非常肮脏的解决方案,其中包括来自底层框架的小部件的最小但不期望的更改。
我只能做到这一点relatedTarget
属性设置同时target
仍然将为空。如果检查target
属性为 null,如果为 null 则取relatedTarget
在小部件方法中,一切都按预期工作。模拟点击和真实点击均正常。
这个解决方案的唯一问题是我必须修改框架中的小部件。这是我们在发布版本中不会做的事情。一般来说这是一个可能的解决方案,但实际上这个解决方案对我们来说是不可接受的。
所以仍然存在一个问题,我如何设置target
具有正确价值的财产。正如该解决方案一般所示,除了设置target
财产。
我看不出 Ferry Kranenburg 提出的解决方案可以实现这一点。如果这个解决方案满足我的需要,那么如果有人可以向我解释这个技巧,那就太好了。