2013-01-18 24 views
6

Tự hỏi những gì các phương pháp đúng để không gian tên nhiều sự kiện sử dụng jquery "on" ...namespacing nhiều sự kiện sử dụng jquery "on"

ví dụ:

$(".parent-selector").on({ 
"mouseenter.namespace": function() { 
    // mouseenter event 
}, 
"mouseleave.namespace": function() { 
    // mouseleave event 
} 
}, ".selector"); 

này không hoạt động .. Nếu tôi xóa ".namespace" thì nó hoạt động.

Ví dụ về jquery trên với không gian tên làm việc:

$(".parent-selector").on("mouseenter.namespace", ".selector", function() { }); 

Tôi hiểu rằng tôi có thể làm cả mouseenter/sự kiện MouseLeave seprately ... chỉ tò mò nếu có một cách để vượt qua không gian tên thông qua các đối tượng

Cảm ơn!

+0

Nhìn vào nguồn, nó sẽ hoạt động ... –

+3

Mã của bạn hoạt động như hiện trạng. http://jsfiddle.net/GHmaE/ –

+0

Mã của tôi hoạt động hoàn hảo như ... vấn đề của tôi là tôi đã có xung đột không gian tên khác. =/Cảm ơn! – Roi

Trả lời

4

Để gắn với nhiều sự kiện mà bạn phải vượt qua một không gian tách ra danh sách các sự kiện:

$(".parent-selector").on("mouseenter.namespace mouseleave.namespace", 
         ".selector", function() { }); 

Edit:

Bạn luôn có thể nhận được các loại sự kiện bên trong gọi lại và gọi chức năng khác bên trong:

$(".parent-selector").on("mouseenter.namespace mouseleave.namespace", ".selector", function(e) { 
    if (e.type == "mouseenter.namespace") { 
     myMouseEnter(e); 
    } else if (e.type == "mouseleave.namespace") { 
     myMouseLeave(e); 
    } 
}); 

Từng có vẻ như hoạt động, tôi không thể xác nhận điều đó, vì tôi không ở trên máy của mình. Hãy thử một lần.

+0

có, điều này hoạt động .. tuy nhiên tôi cần một chức năng khác nhau cho mỗi sự kiện – Roi

+0

Nếu bạn cần một chức năng khác nhau, tại sao bạn kết hợp chúng? – epascarello

+0

mô phỏng "di chuột" với jquery "bật". mouseenter có một hàm, mouseleave có anther. lý do tôi kết hợp chúng là vì vậy tôi không phải khai báo bộ chọn cha/bộ chọn sự kiện hai lần. Chỉ cố gắng giữ cho nó được gói gọn một cách độc đáo – Roi

0

Từ những gì bạn đã nói trong nhận xét, bạn muốn kích hoạt một chức năng khác cho từng không gian tên. Có vẻ lạ bạn sẽ kết hợp chúng để muốn làm điều gì đó khác biệt. Nhưng nếu bạn muốn biết điều gì đã kích hoạt sự kiện, bạn có thể sử dụng event.type.

$("#foo").on("mouseover mouseout", ".bar", 
    function(evt){ 
     console.log(evt.type); 
    } 
); 

JSFiddle

+0

Nó không có gì lạ hơn so với làm nó với (bây giờ loại bỏ) .hover phương pháp theo ý kiến ​​của tôi. Tôi chỉ muốn sử dụng hai trình xử lý riêng biệt hơn là thêm nhiều logic hơn. –

+0

@KevinB, do đó tại sao di chuột bị xóa. lol – epascarello

3

Mã Dưới đây là thực sự đúng - Tôi đã có một vấn đề với namespacing mâu thuẫn trước đó trong các mã.

$(".parent-selector").on({ 
    "mouseenter.namespace": function() { 
     // mouseenter event 
    }, 
    "mouseleave.namespace": function() { 
     // mouseleave event 
    } 
}, ".selector"); 
+1

Thông thường bạn sẽ chỉnh sửa câu hỏi gốc để thêm thông tin này. –

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