2013-06-13 4 views
1

У меня возникли проблемы с моим приложением из-за порядка, который я визуализую .js-скрипты. Например, в http://jsfiddle.net/qCAW3/1 элементы не будут перетаскиваться, пока я не изменю порядок загрузки js-скриптов.Порядок jquery/.js скриптов

<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 

Может кто-нибудь пролить свет на то, что вызывает это. Если я изменил порядок, чтобы заставить перетаскиваемые элементы работать, другие части JavaScript моего приложения перестают функционировать.

+5

Вы должны включить jquery.js перед другими скриптами, которые его используют, в том числе перед jquery-ui.js или другими плагинами jQuery. (Эта концепция не только применима к jQuery, кстати.) С какими сценариями вы столкнулись? – nnnnnn

+0

Это довольно просто, вы не можете вызвать функцию до того, как вы ее определили. – Jonathan

+0

Будет полезно посмотреть вашу консоль javascript. На консоли будут отображаться такие ошибки, как '$ undefined в 'jquery-ui.js''. Всякий раз, когда вы видите, что '' 'undefined, это, вероятно, означает, что некоторый скрипт, использующий jQuery, загружается перед jQuery. –

ответ

1

Зависимости, то есть некоторый код зависит от другого кода. И на веб-странице файлы JavaScript выполняются в том порядке, в котором они объявлены. Что важно для зависимостей!

Допустим, у вас есть два .js файлы, которые выглядят следующим образом:

// person.js 
var Person = function(name) { 
    this.name = name; 
}; 

Person.prototype.greet = function() { 
    alert("Hi, " + name); 
} 

И еще один файл:

// roster.js 
var roster = [ 
    new Person("Alex"), 
    new Person("Eddy") 
]; 

for (var i = 0; i < roster.length; i++) { 
    roster[i].greet(); 
} 

Если мы загружаем roster.js первых, он будет взрываться. Конструктор Person еще не будет доступен, и вызов его в любом случае поднимет искушение.

Если вы загружаете person.js, а затем на груз roster.js, то у вас есть Person, если код запуска работает.


В вашем случае, вам необходимо загрузить JQuery перед любой код, который использует JQuery, по той же причине.

+0

Спасибо за ответ. Случается, что это был еще один скрипт, вызывающий прерывание моего приложения, когда скрипт .js был в правильном порядке. Прекрасное объяснение спасибо. – everreadyeddy

+0

_ «он взорвется» _ - Да, я потерял действительно хороший ноутбук. (+1) – nnnnnn

+0

@nnnnnn Образно, конечно :) –

0

Обычно, когда один файл зависит от другого, его необходимо загрузить после. Это в очень общем смысле. Поскольку ваша проблема сосредоточена вокруг порядка загрузки и времени, я бы предложил посмотреть here. В принципе, убедитесь, что вы ничего не выполняли, прежде чем все файлы зависели от завершения загрузки.

Смежные вопросы