2014-02-11 78 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(); 
});