Причина, по которой вы получаете ошибку, заключается в том, что самопроизвольно выполняющаяся анонимная функция , используемая для инициализации NS.AppName
, вызывается на месте (именно там, где она определена), а не тогда, когда DOM готов.
NS.AppName = (function ($) {
//1: some code
return function(){...}//2
}(jQuery));//3
$(function(){
NS.AppName();//4
});
строка 3 - это самостоятельно исполняемая часть .Он вызывает анонимную функцию, объявленную выше.
Во время вызова строка 3 будет выполнено тело анонимной функции (, включая строку 1 , но не внутри.функция в строка 2 ).Если документ не загружен, когда это происходит (например, если сценарий находится в заголовке), то он потерпит неудачу, поскольку в DOM еще нет $("#cvs")
.
Строка 4 вызовет функцию, определенную в строке 2 , когда DOM полностью загружен ($(f)
эквивалентно $(document).ready(f)
).
Вот еще некоторая информацияо самостоятельном выполнении анонимных функций или использовании более подходящего имени " выражение вызова с немедленным вызовом * "
Сценарий можно исправить тремя способами:
- Удалить любоессылки на DOM из анонимной функции и переместить их в возвращаемую (я бы сделал это, это всего лишь один элемент ...)
- Обернуть весь скрипт в
jQuery(function($){...(you can safely use $ here, so no need for the anonymous functions)...});
- выполнить все это наDOM ready - Переместите его внизу страницы (не идеально, но будет работать)