JQuery: почему hoverIntent здесь не является функцией?

Я изменяю некоторый код из вопроса, заданного несколько месяцев назад, и я продолжаю тупить. Суть в том, что я наведите курсор мыши на Anchors, который должен исчезнуть в соответствующих элементах div, а также применить класс "highlight" к Anchor. Я могу использовать базовый JQuery и получать "ОК" результаты, но события мыши делают работу пользователя менее гладкой.

Я загружаю JQuery 1.3 через Google API.

И это похоже на работу. Я могу использовать встроенную функцию hover() или mouseover(), а fadeIn() не повреждена... ошибок JavaScript и т. Д. Итак, сам JQuery явно "загружен". Но я столкнулся с проблемой, которую казалось, что все рекомендуют hoverIntent для решения.

После загрузки JQuery, я загружаю hoverIntent JavaScript. Я трижды проверил путь, и даже фиктивно доказал путь. Я просто не вижу разумного пути, это может быть вопросом пути.

После того, как внешние (якобы) загружены внешние javascript, я продолжаю со скриптом моей страницы:

var $old=null;

$(function () {
    $("#rollover a").hoverIntent(doSwitch,doNothing)
    });

function doNothing() {};
function doSwitch() {       
        var $this = $(this);
        var $index = $this.attr("id").replace(/switch/, ""); //extract the index number of the ID by subtracting the text "switch" from its name
        if($old!=null) $old.removeClass("highlight"); //remove the highlight class from the old (previous) switch before adding that class to the next
        $this.addClass("highlight"); //adds the class "highlight" to the current switch div
        $("#panels div").hide(); //hide the divs inside panels
        $("#panel" + $index).fadeIn(300); //show the panel div "panel + number" -- so if switch2 is used, panel2 will be shown
        $old = $this; //declare that the current switch div is now "old". When the function is called again, the old highlight can be removed.
        };

Я получаю ошибку:

Ошибка: $("#rollover a"). HoverIntent не является функцией

Если я переключаюсь на известную рабочую функцию, такую ​​как hover (просто меняю ".hoverIntent" на ".hover"), она снова "работает". Я уверен, что это основной вопрос, но я полностью взломан, когда дело доходит до этого (как вы можете видеть из моего кода).

Теперь, по всей видимости, он выглядит как неправильный путь (я проверил zillion и даже поместил его на внешний сайт с HTTP-ссылкой, которую я дважды проверил; это не так), или.js не делает ' объявить функцию. Если это последнее, мне, должно быть, не хватает нескольких строк кода, чтобы сделать функцию доступной, но я не смог ничего найти на сайте автора. В своем исходном коде он использует $(document).ready, который я тоже пытался эмулировать, но, возможно, я тоже сделал это неправильно.

Опять же, странный момент в том, что.hover работает нормально, а.hoverIntent - нет. Я не могу понять, почему это не считается функцией.

Стараясь не пропускать ничего... посмотрим... нет других вызываемых скриптов JavaScripts. Этот пост содержит весь Javascript, который использует страница... Я попытался сделать это в соответствии с авторским примером var config (hoverIntent по-прежнему не является функцией).

У меня возникает зудящее ощущение, что мне просто не хватает одной строки для объявления функции, но я не могу понять, что это такое или почему она еще не объявлена ​​во внешнем файле.js. Спасибо за понимание! Greg


Обновить:

Самое странное, так как я нахожусь на этом... и на самом деле, если это будет решено, мне может не понадобиться hoverIntent решили:

Я добавляю предупреждение в функцию "doNothing" и возвращаюсь к старому.hover, просто чтобы посмотреть, что происходит. Для 2 из 5 якорей, как только я наведусь, вызывается doNothing(), и я вижу предупреждение. Для остальных 3 doNothing() корректно НЕ вызывается до отключения мыши. Как вы можете видеть, та же функция должна применяться к любому Anchor внутри div "rollover". Я не знаю, почему это так.

Но:

  1. Если я изменяю fadeIn на другой эффект, такой как slideDown, doNothing() корректно НЕ вызывается до отключения мыши.
  2. при использовании fadeIn doNothing() не вызывается в Opera, но, похоже, вызывается практически во всех других браузерах.

Возможно ли, что сам fadeIn глючит, или мне просто нужно передать соответствующий обратный вызов? Я не знаю, каким будет этот обратный вызов, если так.

Приветствия за ваше долгое внимание...

Greg

1 ответ

Надеюсь, я не тратил время слишком многих людей...

Оказывается, вторая проблема тоже была в 2 футах от экрана. Я подозревал, что это будет связано с HTML/CSS, потому что странно, что только 2 из 5 элементов демонстрируют странное поведение.

Итак, проверил мой код, выкопал нашего друга FireBug и обнаружил, что я завис над другим div, который перекрывал мой rollover div. Причина бытия? В CSS я назвал его.panels вместо.panel, а имя класса -.panel. Таким образом, он использовал значения по умолчанию для div... т.е. 100% ширина...

Ответ на вопрос... "Будь осторожнее"

Мэтт и Мак заставили меня еще раз проверить мой код и, конечно же, я перезагрузил JQuery после загрузки другого плагина и вставки собственного кода. Так как hoverIntent модифицирует hover() JQuery для работы, повторная загрузка JQuery испортила его.

Это решило, логика продиктовала, что я пересматриваю свой HTML/CSS, чтобы исследовать мою странность fadeIn()... и, конечно же, у меня была опечатка в классе, которая вызвала некоторый хаос.

Тупой тупой тупой... Но теперь я могу спать.

Другие вопросы по тегам