dojo 在javascript中模拟鼠标点击时如何设置target属性?

3zwtqj6y  于 2022-12-22  发布在  Dojo
关注(0)|答案(2)|浏览(170)

我想在我的javascript代码中使用dojo来模拟鼠标点击,一个真实的的鼠标点击动作将使用dojo-stuff和“ondijitclick”来注册。
我知道哪个方法/函数被调用,我也有dijit对象来调用这个方法。这个方法需要一个function对象作为参数,所以我创建了一个新的MouseEvent对象。这一切都很好,除了我需要设置这个事件的目标值,我不知道怎么做。这是必要的,因为后面的异常处理是访问target-property,我不能避免这个。
到目前为止,我有代码:

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将为空,但目标本身不为空)。
是否有可能以某种方式设置目标属性?如果有可能,我想知道我做错了什么?

编辑:

我发现了一个非常肮脏的解决方案,它包括来自底层框架的小部件中的最小但不希望的更改。
我只能在target仍然为空的情况下设置relatedTarget属性。如果检查target属性是否为空,如果为空,则在widget方法中使用relatedTarget,一切正常。模拟点击和真实的点击都正常工作。
这个解决方案的唯一问题是我必须在框架中修改小部件。这是我们在发布构建中不会做的事情。这通常是一个可能的解决方案,但实际上这个解决方案对我们来说是不可接受的。
因此,我仍然有一个问题,即如何用正确的值设置target属性,正如genereal中的解决方案所示,除了设置target属性之外,它都能正常工作。
我看不出Ferry Kranenburg提出的解决方案能达到这个目的。如果这个解决方案能满足我的需要,如果有人能给我解释一下这个技巧就好了。

hmae6n7t

hmae6n7t1#

事件对象的target属性在事件初始化时无法访问。它指向事件触发后接收该事件的第一个元素,并由JavaScript在内部设置为该元素。因此,如果需要一个特殊元素作为事件目标,则必须将事件调度到该元素。
一种方法是使用您自己的方法覆盖本机目标属性,但这可能会影响事件的冒泡行为。

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
  });
  Object.defineProperty(event, 'target', {value: target, enumerable: true});
  dijit.byId(node.id)._doEvent(event);
});
2w3rbyxf

2w3rbyxf2#

您需要先创建一个事件。See here如何模拟鼠标事件。

相关问题