2011-06-18 32 views
5

Thực sự sai lầm khi kích hoạt sự kiện keyup bằng jQuery.jQuery kích hoạt sự kiện keyup chỉ khi nó được đính kèm với jQuery

Dưới đây là ví dụ sạch

http://jsfiddle.net/xQcGM/2/

Khi tôi gõ vào bất kỳ input 's, cả hai đều kiện cháy, nhưng khi tôi cố gắng để bắn nó lập trình ($(element).trigger('event')) chỉ một giây được kích hoạt , nhưng tôi mong đợi cả hai.

Tôi nhớ điều gì ở đâu?

UPD I không thể thay đổi cách xử lý được đính kèm!

+0

"khi tôi cố gắng kích hoạt chương trình" - ý của bạn là gì? – Webars

+0

Câu hỏi hay. Nhưng, tại sao bạn trộn các sự kiện ràng buộc của bạn, btw? Hoặc là các tệp kịch bản khác nhau sử dụng các cách khác nhau của sự kiện ràng buộc? –

+0

@Webars programmatically = '$ (phần tử) .trigger ('event')' – disfated

Trả lời

6

Cách gốc để kích hoạt sự kiện là gọi dispatchEvent. Rất tiếc, phương thức này không xuất hiện ở bất kỳ đâu trong số jQuery's source. Vì vậy, tôi đoán bạn phải tạo ra các đối tượng sự kiện mình và gửi chúng theo cách thủ công.

Đây là phiên bản dài hơn với example đang hoạt động.

$('button').click(function() { 
     var myEvent = document.createEvent('KeyboardEvent'); 
     myEvent.initKeyboardEvent('keyup', true, true, null, false, 
           false, false, false, 76, 0); 
     $('input').each(function() { 
      this.dispatchEvent(myEvent); 
     }); 
    }); 

Hoặc bạn có thể xem jQuery simulate plugin giúp bạn dễ dàng hơn một chút. Đây là phiên bản ngắn hơn với phiên bản example khác đang hoạt động.

$('button').click(function() { 
    $('input').simulate('keyup'); 
}); 
+0

Cảm ơn, điều đó đã rõ ràng. Nó không cần thiết, nhưng có thể tôi bằng cách nào đó có thể mở rộng chức năng kích hoạt jQuery mà nó sẽ làm những giả 'KeyboardEvent' bên trong? – disfated

+0

Tôi đã không xem xét nguồn kích hoạt, nhưng thay thế nó bằng mã của riêng bạn là khá dễ dàng. Tuy nhiên, bạn sẽ phải đối phó với các vấn đề về bình thường hóa một sự kiện DOM cho một sự kiện jQuery để đảm bảo tất cả các sự kiện xử lý khác hoạt động bình thường, thiết lập các thuộc tính thích hợp trên đối tượng sự kiện đó và xử lý các vấn đề trình duyệt chéo. Giải pháp này không đơn giản như việc tạo ra một trình bao bọc, trực tiếp gửi các sự kiện DOM và sau đó gọi thực hiện của jQuery khi đó sự kiện tương tự sẽ được kích hoạt hai lần trong trường hợp đó - một lần cho tất cả các sự kiện trên phần tử và một lần cho các sự kiện ràng buộc jQuery – Anurag

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