javascript - 是否可以通过鼠标单击 <input type=text> 元素来 dispatchEvent()?

标签 javascript mouseevent dispatchevent

基本上,我尝试使用以下代码将自定义的鼠标单击事件分派(dispatch)到文本输入元素(参见 jsFiddle):

function simulateClick(id) {
    var clickEvent = document.createEvent("MouseEvents");
    clickEvent.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0,
        false, false, false, false, 0, null);

    var element = document.getElementById(id);
    element.dispatchEvent(clickEvent);
}

当我在 type="checkbox" 元素上运行该代码时,它工作得很好,但在 type="text" 上调用时它根本不起作用> 元素。

下面是 MDN 上 initMouseEvent() 的定义:

event.initMouseEvent(type, canBubble, cancelable, view, 
                 detail, screenX, screenY, clientX, clientY, 
                 ctrlKey, altKey, shiftKey, metaKey, 
                 button, relatedTarget);

所以在上面的例子中 screenX, screenY, clientXclientY 都将是 0(不过,上面的代码与复选框,无论其位置如何)。我 try catch 真实事件并将屏幕和客户端坐标传递给自定义事件,但无济于事。

我虽然出于安全原因,文本输入元素可能会忽略自定义鼠标事件,但是 element.focus() 也不应该工作,但确实如此。

任何想法或见解将不胜感激!

最佳答案

据我所知,您的代码运行良好。然而,它并没有像您想象的那样关注输入字段,但是事件在输入字段上被触发得很好,如这个 fiddle 所示:http://jsfiddle.net/ENvZY/

注意:虽然代码不兼容跨浏览器,但它在 ie8 中失败。

考虑使用像 jQuery 这样的优秀跨浏览器库,而不是采用原生 DOM 方式 - 轮子存在并且工作完美,重新发明它是浪费时间:)

关于javascript - 是否可以通过鼠标单击 <input type=text> 元素来 dispatchEvent()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5352709/

相关文章:

javascript - Angular 从指令内部的输入中删除无效内容

javascript - Polymer ready() 和事件监听器

javascript - 使用 Jquery 调整 Svg 图像的大小

javascript - onmouseup 或 addEventListener

java - JFreeChart中如何处理鼠标拖动事件

jquery - 在 jQuery 中处理移动 Web 的 mouseover/mouseout 事件

java - 调度鼠标事件

javascript - 是否可以检测 IE 何时忽略 xml 文档中的空白文本节点?