2009-01-20 52 views
60

Có ai biết một phương pháp để kích hoạt một sự kiện trong Prototype, như bạn có thể với chức năng kích hoạt của jQuery không?Kích hoạt một sự kiện với Prototype

Tôi đã ràng buộc trình xử lý sự kiện bằng phương pháp quan sát, nhưng tôi cũng muốn có thể kích hoạt sự kiện theo chương trình.

Cảm ơn trước

+0

Hãy xem câu trả lời của tôi. Có một sự hỗ trợ trong nguyên mẫu ... –

Trả lời

84

event.simulate.js phù hợp với nhu cầu của bạn.

Tôi đã sử dụng vài lần này và nó hoạt động như một sự quyến rũ. Nó cho phép bạn tự kích hoạt các sự kiện có nguồn gốc, chẳng hạn như nhấp chuột hoặc di chuột như vậy:

$('foo').simulate('click'); 

Những điều tuyệt vời về việc này là tất cả các xử lý sự kiện đính kèm sẽ vẫn được thực hiện, cũng giống như khi bạn sẽ đã nhấp vào yếu tố chính mình.

Đối với sự kiện tùy chỉnh bạn có thể sử dụng phương thức mẫu chuẩn Event.fire().

+0

Chính xác những gì tôi đang tìm kiếm, cảm ơn rất nhiều –

+0

Freakin 'rực rỡ! Điều đó đã giúp tôi rất nhiều. Cảm ơn :) – CalebHC

+0

Giao diện rất đẹp. Tuy nhiên, tôi muốn phương thức '.simulate' đó đi vào Prototype.js nguyên bản :) –

35

Tôi không nghĩ rằng có một xây dựng trong Prototype, nhưng bạn có thể sử dụng (không kiểm tra nhưng ít nhất sẽ giúp bạn đi đúng hướng):

Element.prototype.triggerEvent = function(eventName) 
{ 
    if (document.createEvent) 
    { 
     var evt = document.createEvent('HTMLEvents'); 
     evt.initEvent(eventName, true, true); 

     return this.dispatchEvent(evt); 
    } 

    if (this.fireEvent) 
     return this.fireEvent('on' + eventName); 
} 

$('foo').triggerEvent('mouseover'); 
+0

ý của bạn là $ ('foo'). TriggerEvent ('mouseover')? –

+0

Câu trả lời của Greg làm việc cho tôi, nhưng nó phải là '$ ('foo'). TriggerEvent ('mouseover');' thay vì '$ ('foo'). FireEvent ('mouseover');' ps. xin lỗi im mới ở đây và không biết làm thế nào để báo giá hoặc bình luận về một câu trả lời đã tồn tại ... thx – thyagx

+0

Cách thử nghiệm; rất đẹp! – quickshiftin

5

tôi tìm thấy bài này hữu ích. .. http://jehiah.cz/archive/firing-javascript-events-properly

Nó bao gồm một cách để kích hoạt các sự kiện trong cả Firefox và IE.

function fireEvent(element,event){ 
    if (document.createEventObject){ 
     // dispatch for IE 
     var evt = document.createEventObject(); 
     return element.fireEvent('on'+event,evt) 
    } 
    else{ 
     // dispatch for firefox + others 
     var evt = document.createEvent("HTMLEvents"); 
     evt.initEvent(event, true, true); // event type,bubbling,cancelable 
     return !element.dispatchEvent(evt); 
    } 
} 
3

Những câu trả lời ở đây là đúng đối với các sự kiện "Bình thường", đó là sự kiện được xác định bởi các User Agent, nhưng đối với các sự kiện tùy chỉnh, bạn nên sử dụng phương pháp "lửa" nguyên mẫu của. ví dụ.

$('something').observe('my:custom', function() { alert('Custom'); }); 
. 
. 
$('something').fire('my:custom'); // This will cause the alert to display 
Các vấn đề liên quan