2010-07-18 12 views

Trả lời

109

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.elementFromPointHTMLElement.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

+5

Thật tuyệt vời !! Chính xác những gì tôi đang tìm kiếm!!! = O – RadiantHex

+0

có hoạt động với IE và WebKit không? – RadiantHex

+1

@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. –

1

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?

+0

@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

+1

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

+0

Sự thật nằm trong câu trả lời dưới đây, 'createEvent()' + 'initMouseEvent()' – Valer

45

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.

+0

Đã 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

+3

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

+1

Điều này nhiều, mạnh hơn nhiều so với '$ .click()' –

18

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