2015-01-06 3 views
0

У меня есть следующий сценарий в использовании:Что может привести к тому, что функция document.ready будет пустой?

script type="text/javascript"> 
    $(document).ready(function() { 
    $('li:last-child').hover(function() { 
     $('#test').addClass('transparent'); //mouseover 
    }, function() { 
     $('#test').removeClass('transparent'); //mouseout 
    }); 
}); 
</script> 

Со следующим макетом HTML:

<body onload="javascript that makes the menu..."> 
    <div id="menu" //this houses the li elements that are created by the javascript></div> 
    <div id="test"> 

По сути, у меня есть JavaScript, который создает меню, наполненное Li элементов. Последний из этих элементов должен иметь возможность изменять непрозрачность div с помощью теста id при наведении. Css, который имеет значение, является следующим:

.transparent{ 
     opacity: 0 !important; 
} 

Но по некоторым причинам этот код не работает. Проверка в консоли браузера дает мне TypeError, что $ (...) является нулевым в строке, которая запускает javascript, увиденный выше. Что может вызвать эту ошибку и как я могу ее обойти?

+1

Звучит как '$' не относится к jQuery. –

+0

Lol @ nickname :-) какие js-библиотеки загружены? – sodawillow

+1

Ну, вы не закрываете функцию готовности документа. Я не уверен, что это главная проблема, но это проблема. – Chad

ответ

1

Возможно, ваша библиотека JQuery не загружается или находится в конфликте. Вы пытались использовать jQuery (документ) вместо $ (document)? Имеет ли он такое же поведение? Если это так, я предлагаю вам посмотреть путь к вашей библиотеке, если это будет правильно.

+0

Это скорее комментарий, чем ответ. Не используйте раздел ответа для комментариев. –

+0

Это ответ работал для меня. Нет, где в документах упоминается, что Jquery работает, если $ not. Благодарю. Сохранял мои минуты. –

1

Похоже, что jQuery не загружается вовремя. Чтобы исправить это, убедитесь, что вы загружаете jQuery перед запуском вашего скрипта. Кроме того, убедитесь, что нет ошибок JavaScript, которые происходят до ошибки, которую вы описываете. (Вы можете проверить это, нажав клавишу F12 в большинстве браузеров, чтобы открыть консоль JavaScript.)

Так что ваш код может выглядеть следующим образом:

<!-- Load jQuery --> 
<script src="//code.jquery.com/jquery-2.1.3.min.js"></script> 
<!-- Now do stuff with jQuery --> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     ... 
    }); 
</script> 

Примечание: в качестве альтернативы, то может быть повторно определение $ , Я думаю, что это очень маловероятно, но возможно, что у вас есть код где-то, что делает это.

+0

Никаких других ошибок JavaScript на странице. Я не вижу ничего, что могло бы пересмотреть $. Что касается того, что jQuery не загружается вовремя, как я могу заставить его загрузить до запуска скрипта? Не будет ли document.ready автоматически ждать этого? У меня здесь есть скрипка. Мне не удалось отделить скрипт от части html - jsfiddle не будет обновляться должным образом. http://jsfiddle.net/52apupu3/4/ – javascriptwillbetheendofme

+0

Я немного смущен вашей скрипкой, поскольку она, похоже, не содержит код из вашего вопроса (хотя, возможно, я просто пропустил его). В любом случае, в скрипте вы определяете '$ = function (id) {return document.getElementById (id); } '. Также похоже, что вы не загружаете jQuery вообще. –

+0

ОК, я вернулся через него, и понял, что целая куча вещей пропала. Хорошо, вот новый jsfiddle, и на этот раз я обещаю, что все там. http://jsfiddle.net/vdum3uv7/ Я исправил вопрос о переопределении $ и заменил его на новую букву «K». Тем не менее, никаких изменений в функциональности. РЕДАКТИРОВАТЬ: Поцарапать, что есть изменения в функциональности. Поисковая панель справа, похоже, больше не принимает «! W/g/i/etc» после изменения переменной $ to K. Теперь я еще более смущен этим. – javascriptwillbetheendofme