2009-03-16 41 views
5

tôi có một liên kết mà có một người biết lắng nghe gắn liền với nó (Tôi đang sử dụng YUI):Javascript: mô phỏng một nhấp chuột vào một liên kết

YAHOO.util.Event.on(Element, 'click', function(){ /* some functionality */}); 

Tôi muốn các chức năng tương tự xảy ra trong kịch bản khác mà không liên quan đến việc người dùng nhấp chuột. Lý tưởng nhất là tôi chỉ có thể mô phỏng "cách nhấp" trên Element và có chức năng tự động kích hoạt. Làm thế nào tôi có thể làm điều này? Quá xấu điều này không hoạt động:

$('Element').click() 

Cảm ơn.

Trả lời

3

Bạn có thể khai báo riêng hàm của mình.

function DoThisOnClick() { 
} 

Sau đó gán nó vào sự kiện onclick như bạn làm ngay bây giờ, ví dụ:

YAHOO.util.Event.on(Element, 'click', DoThisOnClick) 

Và bạn có thể gọi nó là bất cứ khi nào bạn muốn :-)

DoThisOnClick() 
+0

True ... nhưng trình xử lý sự kiện YUI có quyền truy cập vào các biến như 'this' và các tham số khác được xử lý bởi khung công tác YUI. Nó sẽ là lý tưởng để chỉ cháy cùng một sự kiện. –

+0

"this" giữ tham chiếu đến đối tượng mà bạn đã nhấp vào. Nếu bạn tự gọi hàm, không có đối tượng như vậy. Vì vậy, chức năng của bạn cần phải đối phó với nó. Thử: if (this) // do smth; else // làm smth khi không có "this" –

-1

Tất nhiên $ (Nhấp vào() sẽ không hoạt động, nhưng nó có thể nếu bạn bao gồm jquery, nó hoạt động tốt cùng với yui.

Như tôi untestand bạn cần phải làm như sau:

function myfunc(){ 
//functionality 
} 

YAHOO.util.Event.on(Element, 'click', myfunc); 

Sau đó gọi myfunc khi cái gì khác cần phải xảy ra.

-4

Không có khả năng mô phỏng nhấp chuột của người dùng trên phần tử tùy ý là cố ý và vì lý do rõ ràng.

+0

Vui lòng giải thích. – TweeZz

9

Bạn đang tìm kiếm fireEvent (IE) và dispatchEvent (những người khác).

Đối với YUI 3 này là tất cả các gói lên độc đáo trong Y.Event.simulate():

YUI().use("node", function(Y) { 
    Y.Event.simulate(document.body, "click", { shiftKey: true }) 
}) 
9

MDC có tốt example of using dispatchEvent để mô phỏng sự kiện nhấp chuột.

Dưới đây là một số mã để mô phỏng một nhấp chuột vào một yếu tố đó cũng kiểm tra nếu một cái gì đó đã hủy sự kiện:

function simulateClick(elm) { 
    var evt = document.createEvent("MouseEvents"); 
    evt.initMouseEvent("click", true, true, window, 
    0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    var canceled = !elm.dispatchEvent(evt); 
    if(canceled) { 
    // A handler called preventDefault 
    // uh-oh, did some XSS hack your site? 
    } else { 
    // None of the handlers called preventDefault 
    // do stuff 
    } 
} 
+0

Điều này hoạt động rất tốt và rất dễ thực hiện. Cảm ơn ! – gramm

+0

Tôi có phải có YUI để thực hiện việc này không? –

+0

Không, bạn không phải sử dụng YUI để sử dụng. –

0

1) ĐẦU GIẢI PHÁP

bài viết http://mattsnider.com/simulating-events-using-yui/ mô tả làm thế nào để mô phỏng một nhấp chuột sử dụng YA HOO:

var simulateClickEvent = function(elem) { 
    var node = YAHOO.util.Dom.get(elem); 

    while (node && window !== node) { 
     var listeners = YAHOO.util.Event.getListeners(node, 'click'); 

     if (listeners && listeners.length) { 
      listeners.batch(function(o) { 
       o.fn.call(o.adjust ? o.scope : this, {target: node}, o.obj); 
      }); 
     } 

     node = node.parentNode; 
    } 
}; 

Như bạn có thể thấy, hàm lặp qua nút và cha mẹ và mỗi chức năng sẽ nhận danh sách người nghe và gọi cho họ.

2) GIẢI PHÁP SECOND

Ngoài ra còn có một cách khác để thực hiện. Ví dụ:

var elem = YAHOO.util.Dom.get("id-of-the-element"); 
elem.fireEvent("click", {}); 

nơi hàm được sử dụng như

3) GIẢI PHÁP THỨ BA

Phiên bản 2.9 của YUI2 có một giải pháp tốt hơn: http://yui.github.io/yui2/docs/yui_2.9.0_full/docs/YAHOO.util.UserAction.html

4) QUY ĐỊNH GIẢI PHÁP

YUI3 cũng có giải pháp tốt hơn và sạch hơn: http://yuilibrary.com/yui/docs/event/simulate.html

Các vấn đề liên quan