Почему этот jQuery работает как скрипка, но не на моей веб-странице?

У меня есть для этой скрипки ( http://jsfiddle.net/hgGfw/ ), я следил учебник по слайдеру, и это код, который у меня есть. Он использует функцию самовызова (я думаю, это так называется??). Во всяком случае, он работает с jQuery, установленным на «onLoad» на скрипке, но когда он находится на моем сервере, он ничего не делает, пока не будет завернут в $(document).ready(.... script. Почему это? JSLint также стонет о это;

( direction === 'next' ) ? ++current : --current;

Есть идеи, почему? Мой PHP неплох, поэтому я знаю синтаксис этого оператора, и он мне кажется вполне приемлемым.

Спасибо, Дэн.


person Dan    schedule 10.09.2012    source источник
comment
Итак, это действительно работает, но вам интересно, зачем вам $(document).ready()?   -  person Álvaro González    schedule 10.09.2012
comment
jsfiddle автоматически оборачивает ваш код скрипта в $(window).load..   -  person Michal Klouda    schedule 10.09.2012
comment
Вы не можете обрабатывать DOM, пока не будут загружены все элементы. Вот почему существует функция .ready(). Если вы попытаетесь манипулировать элементами DOM до того, как они будут готовы, вы получите неожиданные результаты.   -  person Lee Taylor    schedule 10.09.2012


Ответы (2)


Если вы разместите javascript/jquery на панели JavaScript сайта http://jsfiddle.net, он автоматически разместит ваш код в блок $(window).load(function(){ } (когда в раскрывающемся списке Framework установлено значение onLoad и параметр jQuery).

Если вы посмотрите на источник кадра на панели результатов, вы увидите, что дело обстоит именно так.

Что касается того, почему JSLint не нравится команда, я предполагаю, что она ожидает присваивания (несмотря на тот факт, что вы выполняете увеличение/уменьшение для переменной current).

Если вы присваиваете значение переменной, JSLint доволен. то есть...

var tempVar = ( direction === 'next' ) ? ++current : --current;
person freefaller    schedule 10.09.2012
comment
или лучше: текущий += направление === 'следующий'? 1 : -1; - person Michal Klouda; 10.09.2012
comment
Совершенно верно, @Michal, но я пытался дать представление о том, почему JSLint может жаловаться, а не пытаться придумать лучшую идею ... хотя точка зрения принята - person freefaller; 10.09.2012
comment
Спасибо за ваш вклад! @freefaller, действительно ли неправильно использовать этот оператор? Я взял этот код из урока на tuts plus, который (?) должен быть хорошим материалом. Я просто хочу научиться как можно быстрее, я не против, как :) - person Dan; 10.09.2012
comment
@ Дэн, нет, это НЕ неправильно - насколько я понимаю (и знаю), синтаксис, который вы использовали, абсолютно прекрасен. Обычно вы присваиваете результат тернарного оператора, и JSLint, очевидно, предполагает, что это всегда так. Однако, как вы уже поняли, это не всегда так :-) - person freefaller; 10.09.2012

Я подозреваю, что JSLint жалуется, потому что тернарный оператор предназначен для выбора значения для выражения, а не для выбора пути выполнения.

Здесь вы использовали его как сокращение для утверждения «если», которое будет работать, но немного необычно.

person OlduwanSteve    schedule 10.09.2012