Совместимость с jQuery .prop () - PullRequest
4 голосов
/ 12 июня 2011

Я пытаюсь проверить, существует ли метод .prop() в текущем включенном jQuery (по соображениям совместимости) через:

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

Я ожидаю, что вышеприведенное условие будет true для jQuery >= 1.6 и false для jQuery < 1.6, как я могу понять из документов

В любом случае, тестирование на jsfiddle приводит к:

typeof $.prop === 'function':

  • true при jQuery >= 1.6
  • false при jQuery < 1.6 and jQuery > 1.3
  • true при jQuery <= 1.3

здесь - очень очень простой скрипт, который предоставляет результаты выше (просто переключите версию jQuery, чтобы увидеть то, что я описал).

Когда я пытаюсь использовать это .prop() с jQuery, т.е. 1.3, я получаю ошибку .prop is not a function. Та же проблема возникает и при тестировании вне jsfiddle. Это нормальное поведение? Как я могу по-настоящему проверить, если .prop() доступен?

Спасибо

Ответы [ 3 ]

6 голосов
/ 12 июня 2011

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

Вы хотите проверить метод .prop в прототипе jQuery, который находится на $.fn. Это неверно в 1.3.

Также я бы избегал обнаружения функций для версий jQuery и вместо этого поддерживал бы определенную версию (и выше).

6 голосов
/ 08 декабря 2011

Что я сделал, так это построил совместимую функцию для prop, для версий jQuery, которая не использует 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);

Вы можете проверить этот код: http://jsfiddle.net/JtK2Q

4 голосов
/ 12 июня 2011

Вы проверяете наличие статического метода.

Вам необходимо проверить метод экземпляра, написав $.fn.prop ($.fn совпадает с $.prototype).

...