2014-02-11 113 views
2

我想模拟鼠标点击x,y坐标使用JavaScript。 我使用下面的功能,这对于大多数HTML元素的正常工作:模拟鼠标点击x,y使用javascript

setTimeout(function() { 
    var event = document.createEvent("MouseEvents"); 
    event.initEvent("click", true, true); 
    document.elementFromPoint(x, y).dispatchEvent(event); 
}, 1000); 

然而,当统筹包含在文本框中它是无法选择一个文本框(输入HTML控件)被点击。

有无论如何我可以模拟选择输入html元素?

注意:网页顶部有一些东西,我有点儿把点击操作传递给下面的网页使用javascript。

+2

您也可以派发焦点事件。 – crush

+0

@crush我累了把焦点设置在X,Y点击之前和之后的元素,但它没有工作。如果一个文本框已经有了焦点,那么除了当模拟点击点击一个按钮或一个链接时,它不会失去模拟鼠标点击的重点。 – thunderbird

+0

如果它有重点,那么为什么你需要点击它? – crush

回答

0

jsfiddle演示您可能面临的问题。当您执行document.elementFromPoint(x, y)时,它不会超出覆盖范围,因为您的覆盖文件位于文档的z-index前面。

为了克服这个问题,您可以将点击处理程序绑定到叠加层,快速隐藏它,获取下面的元素,然后再次显示叠加层。

看到这个jsfiddle

overlay.addEventListener("click", function (e) { 
    var element = null; 

    this.style.display = 'none'; //Hide it. 
    element = document.elementFromPoint(e.x, e.y); //Get your element 
    this.style.display = ''; //Unhide it. 

    var event = document.createEvent("MouseEvents"); 
    event.initEvent("click", true, true); 
    element.dispatchEvent(event); 
}); 

这将点击叠加层后面。但是,文本输入元素上的simply triggering the click event不会使其焦点集中。

我不确定jQuery在源代码中做了什么......我试图追踪它,但不能。但是,使用jQuery的focus()方法works here

overlay.addEventListener("click", function (e) { 
    var element = null; 

    this.style.display = 'none'; //Hide it. 
    element = document.elementFromPoint(e.x, e.y); 
    this.style.display = ''; //Unhide it. 

    $(element).focus(); 
});