jQuery и IE, объект не поддерживает это свойство или метод - PullRequest
2 голосов
/ 22 ноября 2011

Я использовал этот фрагмент кода, чтобы получить выпадающее меню стиля на веб-сайте. Он прекрасно работает во всех браузерах, кроме IE, и даже отлично работает в IE, за исключением одной страницы, где я получаю сообщение об ошибке «Объект не поддерживает это свойство или метод».

Здесь IE сообщает мне об ошибке: эта часть находится в "заголовочном" файле, который загружается первым до остальной части страницы.

<script type="text/javascript"> 
$(document).ready(function(){
    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

if(document.all){
    $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    };
});

$.fn.hoverClass = function(c) {
    return this.each(function(){
    $(this).hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
        );
    });
};    
</script> 

Я не думаю, что ошибка в коде, потому что он работает нормально, без ошибок на каждой странице, кроме этой, это также единственная страница, которая использует дополнительный код jQuery. Остальная часть кода jQuery отлично работает на странице, только всплывающее окно не работает при наведении курсора на пункты меню. Если кто-нибудь может помочь мне найти ответ, он будет очень признателен.

Спасибо

Ответы [ 3 ]

5 голосов
/ 22 ноября 2011

Когда вы звоните hoverClass, он еще не был определен.Вам нужно объявить $.fn.hoverClass в начале вашего кода.

$.fn.hoverClass = function(c) {
    return this.each(function(){
    $(this).hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
        );
    });
};   
$(document).ready(function(){
    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

if(document.all){
    $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    };
}); 
2 голосов
/ 22 ноября 2011

Вы получаете доступ к $.fn.hoverClass до его объявления. Вы должны объявить / загрузить все плагины перед любым другим кодом, просто для безопасности.

Кроме того, в $.fn.hoverClass вам не нужно .each, вы можете просто return this.hover(). (Кроме того, вам не нужна точка с запятой после if операторов).

$.fn.hoverClass = function(c) {
    return this.hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
    );
}; 

$(document).ready(function(){
    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

    if(document.all){
        $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    }
});
0 голосов
/ 22 ноября 2011

Я думаю, что плагин переопределяется jQuery.Может быть, вы включили JQuery несколько раз на этой странице.Попробуйте это

$(document).ready(function(){

$.fn.hoverClass = function(c) {
    return this.each(function(){
    $(this).hover( 
        function() { $(this).addClass(c);  },
        function() { $(this).removeClass(c); }
        );
    });
};  

    $("#nav-one li").hover(
        function(){ $("ul", this).fadeIn("fast"); }, 
        function() { } 
    );

if(document.all){
    $("#nav-one li").hoverClass("sfHover");//THIS LINE IS WHERE THE ERROR IS
    };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...