Có thể sử dụng các tọa độ đã cho để mô phỏng một cú nhấp chuột trong JavaScript trong một trang web không?Làm cách nào để mô phỏng nhấp chuột bằng cách sử dụng tọa độ x, y trong JavaScript?
Trả lời
Bạn có thể gửi nhấp vào sự kiện, mặc dù điều này không giống như nhấp chuột thực. Ví dụ, nó không thể được sử dụng để lừa một tài liệu iframe tên miền chéo vào suy nghĩ nó được nhấp vào.
Tất cả các trình duyệt hiện đại đều hỗ trợ document.elementFromPoint
và HTMLElement.prototype.click()
, vì ít nhất là IE 6, Firefox 5, bất kỳ phiên bản Chrome nào và có thể là bất kỳ phiên bản Safari nào mà bạn có thể quan tâm. Nó thậm chí sẽ theo các liên kết và nộp tờ:
document.elementFromPoint(x, y).click();
https://developer.mozilla.org/En/DOM:document.elementFromPoint https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
Thật tuyệt vời !! Chính xác những gì tôi đang tìm kiếm!!! = O – RadiantHex
có hoạt động với IE và WebKit không? – RadiantHex
@RadiantHex: vâng, trên thực tế IE là người đầu tiên triển khai nó và nó quay trở lại IE6. Việc triển khai Chrome, Firefox và Safari 5 là tốt nhưng Safari 4 và Opera không chính xác (mặc dù khả thi). Xem http://www.quirksmode.org/dom/w3c_cssom.html#documentview. –
Vì lý do bảo mật, bạn không thể di chuyển con trỏ chuột bằng javascript hoặc cũng không mô phỏng nhấp chuột với nó.
Điều gì mà bạn đang cố gắng thực hiện?
@Aicule: cảm ơn vì đã cho tôi biết! Tôi sẽ thêm một chút thông tin vào câu hỏi. Tôi chỉ đang thử nghiệm, không có gì thực sự hiệu quả =) – RadiantHex
Trong Chrome và Safari, bạn có thể kích hoạt một nhấp chuột tại vị trí x, y cụ thể. Đây là cách [demo này] (http://thdoan.github.io/magnify/demo-map.html) hoạt động. Firefox là trình duyệt duy nhất mà nó không thành công, vì vậy có thể đó là một chính sách bảo mật dành riêng cho Firefox. – 10basetom
Sự thật nằm trong câu trả lời dưới đây, 'createEvent()' + 'initMouseEvent()' – Valer
Có, bạn có thể mô phỏng một click chuột bằng cách tạo ra một sự kiện và cử nó:
function click(x,y){
var ev = document.createEvent("MouseEvent");
var el = document.elementFromPoint(x,y);
ev.initMouseEvent(
"click",
true /* bubble */, true /* cancelable */,
window, null,
x, y, 0, 0, /* coordinates */
false, false, false, false, /* modifier keys */
0 /*left*/, null
);
el.dispatchEvent(ev);
}
Cẩn thận khi sử dụng click
phương pháp trên một phần tử - nó được triển khai rộng rãi nhưng không chuẩn và sẽ thất bại trong ví dụ PhantomJS. Tôi cho rằng việc triển khai của jQuery là .click()
thực hiện điều đúng nhưng chưa được xác nhận.
Đã cứu tôi khỏi một mớ hỗn độn. Phương pháp ban đầu của tôi thất bại nhưng điều này đã đến để giải cứu, cảm ơn. – iChux
plus1 vì không sử dụng jQuery. Ngược lại với câu trả lời được chấp nhận, câu trả lời này _does_ trả lời câu hỏi. – tomekwi
Điều này nhiều, mạnh hơn nhiều so với '$ .click()' –
Đây chỉ là torazaburo's answer, được cập nhật để sử dụng đối tượng MouseEvent.
function click(x, y)
{
var ev = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true,
'screenX': x,
'screenY': y
});
var el = document.elementFromPoint(x, y);
el.dispatchEvent(ev);
}
Mục tiêu của bạn là gì? :) Bạn đang cố gắng mô phỏng một cú nhấp chuột trên một bản đồ hình ảnh chẳng hạn? –