«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2017/04/07 11:52:09  №968669 1
Есть конструкция вида (function($){…})(jQuery). Когда она находится внутри <script></script> прямо под тем html-кодом, который её вызывает, всё ок. Но стоит перенести функцию в отдельный js-файл, как работать перестаёт, просто не реагирует на нажатие кнопок, как будто его и нет.
Весь код: https://jsfiddle.net/ex16zd7h/

>«(function($){…})(jQuery) » создает анонимную функцию, и тут же
>вызывает ее, передавая в качестве параметра объект jQuery, таким
>образом внутри анонимной функции мы можем использовать алиас $
>не боясь за конфликты с другими библиотеками — так как теперь $
>находится лишь в области видимости нашей функции, и мы имеем
>полный контроль над ней.

Как её правильно вынести в отдельный файл?
Ответы: >>968671 >>968735 >>971930
Аноним 2017/04/07 11:58:36  №968671 2
Ответы: >>968672
Аноним 2017/04/07 12:03:02  №968672 3
>>968671
Не понял тебя. По ссылке правила для $( document ).ready(), но у меня скрипт должен срабатывать не после загрузки страницы, а при клике по ссылке. JS-файл загружается в head самым последним. А код, который хочу перенести из html-файла, в js-файле вставляю тоже в самый низ.
Ответы: >>968673
Аноним 2017/04/07 12:11:24  №968673 4
>>968672
Браузер выполняет твой html (именно html, не js) сверху вниз. Когда ты подрубаешь свой js файл через тег <script> у тебя в доме находятся только те теги которые выше него в html файле. В твоём коде за авторством Тимура эвент вешается на ссылку через $('.submit.button').click но видимо в этот момент дом пуст, там еще нет этой ссылки. Твои варианты:
1) дерунть код в конце html файла руками через чет типа <script>init();</script>
2) дернуть код через $(document).ready
3) использовать $().live или $().on или как он блять сейчас в этой параше называется чтобы вешать эвенты на те элементы, которых еще нет в доме.
Ответы: >>968674 >>968680 >>971930
Аноним 2017/04/07 21:32:15  №968966 5
Решил первую задачу из урока "Еще немного задачек", про банкомат, на основе жадного алгоритма.

https://3v4l.org/WDC9X
Ответы: >>971930
Аноним 2017/04/11 17:53:24  №971930 6
>>968966

> if ($i <= $quantity){
> }else {
Тут можно избавиться от if используя конструкцию: число купюр = наименьшее из (результат деления), (число купюр в банкомате).

Работает верно.

>>968669

Во-первых, оборачивать все в функцию не требуется. Никаких конфликтов там не будет, если ты только не пытаешься подключить несколько версий джейквери на страницу.

Во-вторых, как тебе написали ниже, DOM создается не мгновенно, а постепенно, по мере разбора документа. Если ты подключаешь свой скрипт в head, то в этот момент body еще не создано и поля с файлом нет, и повесить на него событие не получится.

Тебе там советуют использовать событие ready, но я дам другой совет. Помести во внешний файл функцию вроде function initFileUpload, а в HTML-коде под формой с файлом вставь ее вызов. Тогда она вызовется уже после того как форма появится в DOM.

А с ready надо ждать пока страница загрузится целком, это значит что событе будет навешено позже, может даже уже после того как пользователь что-то сделает на странце.

>>968673

Лучше не ready, а поместить вызов инициализации сразу после формы. Так она раньше иницииализируется, а в твоем случае достаточно одного долго грузяющегося скрипта чтобы ready задержалось.