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

标签 javascript dojo mouseevent

我想在使用 dojo 的 javascript 代码中模拟鼠标点击。真正的鼠标点击 Action 将使用带有“ondijitclick”的dojo-stuff 进行注册。

我知道哪个方法/函数被调用,我也有 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。

是否有可能以某种方式设置目标属性?如果可能的话,我想知道我做错了什么?

编辑:

我找到了一个非常肮脏的解决方案,其中包括来自底层框架的小部件的最小但不希望的更改。

我只能实现 relatedTarget 属性已设置,而 target 仍然为空。如果检查 target 属性是否为 null,如果它为 null,则采用 widgets 方法中的 relatedTarget 一切正常。模拟点击和真实点击都正常。

此解决方案的唯一问题是我必须修改框架中的小部件。这是我们在发布构建中不会做的事情。这是一般情况下可能的解决方案,但实际上这种解决方案对我们来说是 Not Acceptable 。

因此仍然存在如何为 target 属性设置正确值的问题。正如解决方案所示,除了设置 target 属性外,它都可以正常工作。

我看不出这是在 Ferry Kranenburg 提出的解决方案中实现的。如果这个解决方案可以满足我的需要,那么如果有人能向我解释这个技巧就太好了。

最佳答案

初始化事件时,无法访问事件对象的target 属性。它指向事件触发后接收事件的第一个元素,并由 JavaScript 在内部设置为该元素。因此,如果您需要一个特殊元素作为事件目标,您必须将事件分派(dispatch)给该元素。

一种方法是用您自己的方法覆盖 native 目标属性,但这可能会影响事件的冒泡行为。

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

关于javascript - 在javascript中模拟鼠标点击时如何设置目标属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108094/

相关文章:

javascript - Chrome URLS 是如何工作的?

dojo - 是否有类似于 JQuery 插件 FullCalendar 的 Dojo 日历?

javascript - 使 dijit.form.currencytextbox 接受小数点后一位数字的负值

java - (jzy3d) 如何在Scatter上有效显示工具提示?

javascript - onChange 不适用于 selectedIndex

Javascript - 计算两个相关字段之间的剩余部分

combobox - JAWS和虚拟PC光标模式: is Jaws supposed to automatically switch to forms mode when encountering a dijit combobox?

Java - 鼠标事件在 JTable 中不起作用

c# - 如何在 TeeChart for .net 中添加鼠标点击事件

javascript - 使用 filter() thisArg 编译 TypeScript