2011-09-21 40 views
12

Tôi có một câu hỏi liên quan đến các sự kiện nhấn phím jQuery. Tôi có mã sau (đang hoạt động):Unbind event keypress đặc biệt

$(document).bind('keypress', function(event) { 

    if ($('#myDiv').is(':visible')) { 

     if (event.which == 102) { 
      // ...do something... 
     } 

    } 
    else { 
     if (event.which == 102) { 
      return; 
     } 
    } 

}); 

Tôi luôn luôn "unbind" sự kiện bằng cách ràng buộc một sự kiện khác. Tôi biết rằng tôi có thể unbind nó với .unbind('keypress') nhưng tôi có nhiều sự kiện nhấn phím và khi tôi unbind này với $(document).unbind('keypress') tất cả các sự kiện của tôi bị lạc.

Tôi có thể làm điều gì đó như "nhấn phím.102" để chỉ hủy liên kết "khóa" cụ thể này hay cách thực hiện điều này ?!

Trả lời

27

Bạn đang đi đúng hướng. Đó được gọi là namespaced events, tức là ghi nhãn các ràng buộc cụ thể bằng cách sử dụng <event_name>.<namespace> (trong trường hợp của bạn, "nhấn phím.102").

Ví dụ:

$(document).bind("keypress.key102", function(event) { 
    if ($('#myDiv').is(':visible')) { 

     if (event.which == 102) { 
      // ...do something... 
     } 

    } 
    else { 
     if (event.which == 102) { 
      return; 
     } 
    } 
}); 

bạn sau này có thể unbind rằng nếu không có ảnh hưởng đến các sự kiện phím nhấn ràng buộc khác:

$(document).unbind("keypress.key102"); 
+0

'Cái gì' là gì? –

+0

Tôi đã thêm một ví dụ phù hợp hơn. –

+0

Vâng, tôi hiểu rồi ... nó hoạt động tốt ... cảm ơn bạn !!! – Mikaelik

1

Sử dụng sự kiện không gian tên.

http://docs.jquery.com/Namespaced_Events

+0

Bạn có thể cho một ví dụ về cách OP nên sử dụng sự kiện namespaced để giải quyết vấn đề này? –