13

Có thể phát hiện xem các sự kiện nhất định có được hỗ trợ trong một số trình duyệt nhất định không? Tôi có thể phát hiện xem trình duyệt có hỗ trợ document.addEventListener hay không, nhưng tôi cần biết liệu nó có hỗ trợ sự kiện DOMAttrModified hay không. Firefox và Opera hỗ trợ nó, nhưng Chrome và những người khác thì không.Javascript - phát hiện xem trình xử lý sự kiện có được hỗ trợ

Cảm ơn mọi người có thể trợ giúp!

+1

Tôi không nghĩ rằng nó có thể tuy nhiên trông vào đây để xem hỗ trợ cho IE và Chrome cũng như: http://help.dottoro.com/ljdchxcl.php –

+0

Thankyou, tuy nhiên tôi đã có giải pháp làm việc cho tất cả trình duyệt. Tôi đã hy vọng cho một cách để phát hiện nếu một số trình duyệt hỗ trợ sự kiện để tôi có thể áp dụng các phương pháp thay thế của tôi. Dường như tôi có thể phải sử dụng để phát hiện jQuery.browser. –

Trả lời

15

cập nhật câu trả lời:

, bạn có thể tính năng phát hiện này. Tạo một phần tử, lắng nghe sự kiện và thay đổi một thuộc tính trên phần tử đó. Trong các bài kiểm tra của tôi, bạn thậm chí không cần phải thêm phần tử vào cây DOM, làm cho nó trở thành một tính năng phát hiện đẹp, được chứa.

Ví dụ:

function isDOMAttrModifiedSupported() { 
    var p, flag; 

    flag = false; 
    p = document.createElement('p'); 
    if (p.addEventListener) { 
     p.addEventListener('DOMAttrModified', callback, false); 
    } 
    else if (p.attachEvent) { 
     p.attachEvent('onDOMAttrModified', callback); 
    } 
    else { 
     // Assume not 
     return false; 
    } 
    p.setAttribute('id', 'target'); 
    return flag; 

    function callback() { 
     flag = true; 
    } 
} 

Live copy

Firefox kích hoạt callback trên tất cả các sửa đổi trên; Chrome không ai trong số họ.


Original câu trả lời:

Bạn có thể tính năng phát hiện cho dù một số sự kiện được hỗ trợ, như thể hiện trên this handy page. Tôi không biết nếu bạn có thể kiểm tra cụ thể cho một, nhưng nếu bạn có thể, mã đó cũng có thể giúp bạn bắt đầu.

Cập nhật: I dumped Kangax's code into JSBin và thử nó, không giống như kỹ thuật đánh hơi đó hoạt động cho sự kiện đó (trừ khi tôi có tên viết sai hoặc cái gì đó; Firefox đang hiển thị "sai"). Nhưng kỹ thuật của tôi ở trên.

+0

wow, 'document.body: nhấp? false' trong FF 4 !! – ifaour

+0

@ifaour: Wow, điều đó ** là ** lạ. Cũng FF 3.6. Tuy nhiên, chúng ta đều biết điều đó không đúng ... –

+0

trạng thái ppk [ở đây] (http://www.quirksmode.org/dom/events/index.html#link2) rằng sự kiện loại 'DOMAttrModified' không hoạt động với hệ thống đăng ký sự kiện truyền thống 'onEvent', vì vậy đó có thể là điều đã phá vỡ bài kiểm tra bạn có ở đó, chỉ tìm kiếm thuộc tính 'onEvent' trong phần tử –

0
function isDOMAttrModifiedSupported() { 
    var supported = false; 
    function handler() { 
     supported = true; 
    } 
    document.addEventListener('DOMAttrModified', handler); 
    var attr = 'TEST'; 
    document.body.setAttribute(attr, 'foo'); // aka $('body').attr(attr, 'foo'); 
    document.removeEventListener('DOMAttrModified', handler); 
    document.body.setAttribute(attr, null); 
    return supported; 
    } 
Các vấn đề liên quan