2010-02-09 23 views
33

Tôi làm cách nào để biết mã kích hoạt của mình là preventDefault?jQuery: Làm cách nào để sử dụng event.preventDefault() với sự kiện tùy chỉnh?

$(document).trigger('customEvent', params); 
if (/* ??? */) 
    doDefaultActions(); 
+1

nếu nó là một sự kiện tùy chỉnh .. có không phải là hành động mặc định .. –

+1

Nó vẫn là thứ bạn có thể sử dụng trong cơ chế sự kiện của mình nếu trình xử lý cũng được sử dụng cho các sự kiện không tùy chỉnh. –

+0

Nếu sự kiện tùy chỉnh của bạn thực sự là tùy chỉnh, thì bạn đang cố gắng ngăn chặn điều gì? Thường ngăn chặnDefault được sử dụng để trình duyệt không làm điều bình thường. Bản thân trình duyệt không biết hoặc quan tâm đến các sự kiện tùy chỉnh. –

Trả lời

45

kích hoạt() cũng có thể có một đối tượng sự kiện, vì vậy nếu bạn có thể tạo một đối tượng sự kiện, như vậy:

var event = jQuery.Event("customEvent"); 
$(document).trigger(event); 

sau đó bạn có thể kiểm tra sau khi kích hoạt để xem nếu preventDefault() đã được gọi là như vậy:

var prevented = event.isDefaultPrevented(); 
+0

Thật tuyệt vời. Tìm hiểu điều gì đó mỗi ngày! – Pointy

+3

Vâng tôi đã học được điều này ngày hôm nay bằng cách tìm kiếm nó trên API jQuery. Vì vậy, tất cả chúng ta tìm hiểu ngày hôm nay! –

+0

Điều đó dường như không được ghi lại (ít nhất là tại api.jquery.com) - tôi cũng không thể tìm thấy nó. Các tài liệu bây giờ tốt hơn một chút nhưng tôi vẫn muốn họ làm cho nó thành một wiki. [sửa: ok tôi thấy nó trong nguồn ngay bây giờ !!] – Pointy

0

Theo hiểu biết của tôi, lệnh "preventDefault()" là ngăn chặn phản hồi của trình duyệt gốc với những thứ như nhấp vào thẻ neo hoặc nhấn phím trong trường văn bản. Khi chu trình xử lý sự kiện kết thúc, nó kết thúc. Đối với các sự kiện được tạo nên, tôi không nghĩ rằng nó có bất kỳ hiệu ứng nào vì nó là tất cả về hệ thống xử lý sự kiện jQuery chứ không phải về chức năng trình duyệt nguyên bản.

Mã của bạn có thể đặt một số loại cờ ở đâu đó để giao tiếp với "thế giới bên ngoài".

[sửa] ooh bạn có thể thử xử lý stash một tham chiếu đến đối tượng sự kiện ở đâu đó mà mã bên ngoài có thể tìm thấy nó, và sau đó kiểm tra bên ngoài bằng "isDefaultPrevented()". Tôi không biết liệu điều đó có hiệu quả hay không.

1

Nếu bạn đang yêu cầu làm thế nào để tìm hiểu hay không mặc định đã được ngăn chặn, sử dụng:

event.isDefaultPrevented()

này sẽ trở lại 'true' hoặc 'false' dựa trên hay không preventDefault () được gọi là.

EDIT: http://api.jquery.com/event.isDefaultPrevented/

1

Sự kiện tùy chỉnh không có một số hành động mặc định xảy ra .. (tùy chỉnh).

Mặt khác, nếu bạn muốn dừng hiệu lực thi hành bọt của sự kiện này cho người khác sau đó có một cái nhìn tại triggerHandler mà không bong bóng lên đến hệ thống phân cấp ..

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