2012-06-21 27 views
5

tôi muốn tạo sự kiện tùy chỉnh với jQuery không được đặt thành phần tử DOM.Làm thế nào để bắt được jQuery.event.trigger()?

Nó nói trong mô tả jQuery, rằng:

jQuery.event.trigger('test'); 

là để kích hoạt một sự kiện Custom.

Nhưng làm thế nào tôi có thể bắt được nó ??

thx trước

+0

Bạn có nghĩa là bắt 'kích hoạt' hoặc sự kiện tùy chỉnh đó? – raina77ow

+1

Như thế này? http://jsfiddle.net/6bWJ6/ – Blender

+0

i có nghĩa là sự kiện tùy chỉnh (xin lỗi nếu tôi thể hiện bản thân mình sai) .. – Moszeed

Trả lời

8

Tôi cho rằng bạn đang yêu cầu về điều đó sự kiện tùy chỉnh (ít nhất là nó làm cho không có ý nghĩa đối với tôi cố gắng nắm bắt những trigger): hoàn thành công việc với .bind:

$('some_selector').bind('test', function() { 
    console.log('Test was caught'); } 
); 

UPDATE: Trên thực tế không, bạn không cần một bộ chọn - chỉ là một đối tượng là một 'máy chủ' của sự kiện. Bạn có thể sử dụng một cái gì đó như thế này:

// taken from the comments at the Doc page 
var o = {length: 3}; 
$(o).bind('custom', function(){ console.log('hi') }); 
$(o).trigger('custom'); 

// Output 
hi 
hi 
hi 
+0

có, nhưng tôi có thực sự cần bộ chọn không? ... – Moszeed

+0

cảm ơn, điều đó phù hợp với tôi =) ... – Moszeed

+0

Thuộc tính độ dài là gì? – Chris

0

bạn nên vượt qua các yếu tố mục tiêu của sự kiện để jQuery.event.trigger(), như thế này:

jQuery.event.trigger('test', null, element); 

để khi bạn muốn bắt nó , bạn có thể sử dụng:

$(element).on('test', fn); 

bạn có thể tìm định nghĩa và cách sử dụng của jQuery.event.trigger trong nguồn jQuery:

Sau khi đọc mã nguồn của jQuery, bạn muốn tìm định nghĩa của jQuery.event.trigger:

jQuery.event = { 
    ... 

    trigger: function(event, data, elem, onlyHandlers) {...} 

    ... 
} 

(điều này không có nghĩa là để được một giao diện nào của jQuery và chỉ dành riêng cho sử dụng nội bộ.)

và cách sử dụng:

jQuery.fn.extend({ 
... 
    trigger: function(type, data) { 
     return this.each(function() { 
      jQuery.event.trigger(type, data, this); 
     }); 
    }, 
    triggerHandler: function(type, data) { 
     var elem = this[0]; 
     if (elem) { 
      return jQuery.event.trigger(type, data, elem, true); 
     } 
    }, 
... 
}); 
0

đây là cách:

$(document).bind('test', function (e) { 
    // handler code here... 
}); 
2

tôi nghĩ các bạn ar e thiếu câu hỏi. Anh ta không hỏi làm thế nào bạn lắng nghe một sự kiện được kích hoạt trên một đối tượng. Anh ta hỏi làm thế nào bạn lắng nghe một sự kiện được kích hoạt trực tiếp thông qua jQuery.event.trigger().

Tôi đã tìm thấy một bài viết thực sự tuyệt vời tại http://www.sitepoint.com/jquery-custom-events/.

Về cơ bản bạn chỉ nghe trên đối tượng tài liệu.

$(document).on("test", function(event, data) { 
    console.log(data) 
}); 

$.event.trigger('test', [{ foo: 'bar' }]); 
Các vấn đề liên quan