2011-06-12 26 views
5

Tôi đang cố gắng để kiểm tra nếu các phương pháp .prop() tồn tại trên jQuery hiện tại bao gồm (cho khả năng tương thích lý do) thông qua:jQuery .prop() tương thích

if(typeof $.prop === 'function') 

Tôi mong rằng tình trạng trên là true cho jQuery >= 1.6false cho jQuery < 1.6 như tôi có thể hiểu từ docs

Dù sao, thử nghiệm này trên jsfiddle, dẫn đến:

typeof $.prop === 'function' là:

  • true khi jQuery >= 1.6
  • false khi jQuery < 1.6 and jQuery > 1.3
  • true khi jQuery <= 1.3

here là kịch bản rất rất đơn giản mà cung cấp các kết quả trên (chỉ cần chuyển đổi phiên bản jQuery để xem những gì Tôi đã mô tả).

Khi tôi cố gắng sử dụng số đó .prop() với jQuery nghĩa là 1.3 Tôi nhận được lỗi .prop is not a function. Các vấn đề tương tự cũng kiểm tra bên ngoài jsfiddle. Hành vi đó có bình thường không? Làm thế nào tôi có thể thực sự kiểm tra nếu .prop() có sẵn?

Cảm ơn

+0

tôi đã thử nghiệm nó trên FF4 , Safari5 và Chrome12 – Dalen

+0

xin lỗi đã hiểu nhầm –

+0

Tại sao hỗ trợ 1.3. Nó thực sự cũ. – Raynos

Trả lời

7

alert(typeof $.fn.prop === 'function')

Bạn muốn kiểm tra sự .prop phương pháp trên nguyên mẫu jQuery mà sống trên $.fn. Điều này là sai trong 1.3.

Ngoài ra, tôi sẽ tránh phát hiện tính năng cho các phiên bản jQuery và thay vào đó hỗ trợ một phiên bản cụ thể (và lên).

4

Bạn đang kiểm tra sự tồn tại của một tĩnh phương pháp .

Bạn cần kiểm tra phương pháp thể hiện bằng cách viết $.fn.prop ($.fn giống như $.prototype).

+0

Nó giống với '$ .fn.init.prototype' – Raynos

6

Những gì tôi đã làm, là xây dựng một chức năng tương thích với prop, cho các phiên bản jQuery, mà không sử dụng prop:

(function($){ 
    if (typeof $.fn.prop !== 'function') 
    $.fn.prop = function(name, value){ 
     if (typeof value === 'undefined') { 
      return this.attr(name); 
     } else { 
      return this.attr(name, value); 
     } 
    }; 
})(jQuery); 

Bạn có thể kiểm tra mã này: http://jsfiddle.net/JtK2Q

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