2011-06-12 17 views
5

Próbuję sprawdzić, czy metoda .prop() istnieje na obecnym jQuery wliczone (dla kompatybilności powodu) poprzez:jQuery .prop() Kompatybilność

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

Spodziewam się, że warunek powyżej true dla jQuery >= 1.6 i false dla jQuery < 1.6 jak mogę zrozumieć z docs

Zresztą, testując to na jsfiddle, prowadzi do:

typeof $.prop === 'function':

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

here jest bardzo prosty skrypt, który dostarcza wyniki powyżej (wystarczy przełączyć wersję jQuery, aby zobaczyć, co Opisałem).

Kiedy próbuję użyć tego .prop() z jQuery, tj. 1.3, pojawia się błąd .prop is not a function. Ten sam problem powoduje również testowanie poza jsfiddle. Czy to normalne takie zachowanie? Jak mogę naprawdę sprawdzić, czy jest dostępny .prop()?

Dzięki

+0

zrobiłem go przetestować na FF4 , Safari5 i Chrome12 – Dalen

+0

Przepraszam niezrozumiałe –

+0

Dlaczego wsparcie 1.3. Jest naprawdę stary. – Raynos

Odpowiedz

7

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

Chcesz sprawdzić metodą .prop na prototyp jQuery, która mieszka na $.fn. Jest to wartość false w 1.3.

Chciałbym także uniknąć wykrycia funkcji dla wersji jQuery, a zamiast tego obsługiwać konkretną wersję (i więcej).

4

Ty sprawdzanie istnienia statycznej metody.

Należy sprawdzić metodę instancji, pisząc: $.fn.prop ($.fn to to samo, co $.prototype).

+0

To jest to samo co '$ .fn.init.prototype' – Raynos

6

co zrobiłem, to budować kompatybilną funkcję podpory, dla wersji jQuery, który nie korzysta z podpory:

(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); 

można przetestować ten kod: http://jsfiddle.net/JtK2Q

Powiązane problemy