0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Несколько слов о событии</a></li>
1
<ul><li><a>Несколько слов о событии</a></li>
2
<li><a>Работа с методами JQuery</a><ul><li><a>Метод on ()</a><ul><li><a>Типы обрабатываемых событий</a><ul><li><a>Пространства имен</a></li>
2
<li><a>Работа с методами JQuery</a><ul><li><a>Метод on ()</a><ul><li><a>Типы обрабатываемых событий</a><ul><li><a>Пространства имен</a></li>
3
</ul></li>
3
</ul></li>
4
<li><a>Прямая и делегированная обработка</a></li>
4
<li><a>Прямая и делегированная обработка</a></li>
5
<li><a>Обработчики</a></li>
5
<li><a>Обработчики</a></li>
6
<li><a>Дополнительные данные для слушателя</a></li>
6
<li><a>Дополнительные данные для слушателя</a></li>
7
</ul></li>
7
</ul></li>
8
<li><a>Метод one</a></li>
8
<li><a>Метод one</a></li>
9
<li><a>Дополнительная информация о событии</a></li>
9
<li><a>Дополнительная информация о событии</a></li>
10
</ul></li>
10
</ul></li>
11
<li><a>Как быстро выучить</a></li>
11
<li><a>Как быстро выучить</a></li>
12
</ul><p>JQuery - бесплатная библиотека, которая используется при программировании на JavaScript. Она имеет открытый исходный код и используется для облегчения веб-разработки. </p>
12
</ul><p>JQuery - бесплатная библиотека, которая используется при программировании на JavaScript. Она имеет открытый исходный код и используется для облегчения веб-разработки. </p>
13
<p>JQuery упрощает взаимодействие с DOM-элементами. При помощи этой библиотеки удается реализовывать обработку событий с минимальными трудностями. Именно об этом предстоит поговорить далее. Информация пригодится как разработчикам-новичкам, так и уже более опытным программистам.</p>
13
<p>JQuery упрощает взаимодействие с DOM-элементами. При помощи этой библиотеки удается реализовывать обработку событий с минимальными трудностями. Именно об этом предстоит поговорить далее. Информация пригодится как разработчикам-новичкам, так и уже более опытным программистам.</p>
14
<h2>Несколько слов о событии</h2>
14
<h2>Несколько слов о событии</h2>
15
<p>Все действия клиентов, посещающих веб страницу, можно обработать. Такие операции носят название событий. Примеры:</p>
15
<p>Все действия клиентов, посещающих веб страницу, можно обработать. Такие операции носят название событий. Примеры:</p>
16
<ul><li>передвижение курсора через имеющийся элемент;</li>
16
<ul><li>передвижение курсора через имеющийся элемент;</li>
17
<li>нажатие на тот или иной объект веб-страницы;</li>
17
<li>нажатие на тот или иной объект веб-страницы;</li>
18
<li>выбор радио кнопки.</li>
18
<li>выбор радио кнопки.</li>
19
</ul><p>Событие - это своеобразный "сигнал", который возникает в браузере. Он сообщает клиенту, что что-то произошло для дальнейшего взаимодействия.</p>
19
</ul><p>Событие - это своеобразный "сигнал", который возникает в браузере. Он сообщает клиенту, что что-то произошло для дальнейшего взаимодействия.</p>
20
<p>События в DOM бывают нескольких видов. Ниже - таблица, которая показывает некоторые доступные варианты:</p>
20
<p>События в DOM бывают нескольких видов. Ниже - таблица, которая показывает некоторые доступные варианты:</p>
21
События мышиСобытия клавиатурыСобытия формСобытия окон и документовclickkeypresssubmitloadmouseenterkeydownblurunloaddbclickkeyupchangeresizemouseleavefocusscroll<p>Далее предстоит изучить особенности обработчика событий JS, а также рассмотреть методы JQuery для обработки "происшествий".</p>
21
События мышиСобытия клавиатурыСобытия формСобытия окон и документовclickkeypresssubmitloadmouseenterkeydownblurunloaddbclickkeyupchangeresizemouseleavefocusscroll<p>Далее предстоит изучить особенности обработчика событий JS, а также рассмотреть методы JQuery для обработки "происшествий".</p>
22
<h2>Работа с методами JQuery</h2>
22
<h2>Работа с методами JQuery</h2>
23
<p>В рассматриваемой библиотеке JS повесить событие (слушатель) можно на определенный элемент. Для этого используются две функции:</p>
23
<p>В рассматриваемой библиотеке JS повесить событие (слушатель) можно на определенный элемент. Для этого используются две функции:</p>
24
<ul><li>on;</li>
24
<ul><li>on;</li>
25
<li>one.</li>
25
<li>one.</li>
26
</ul><p>Первый вариант используется еще и для более краткой записи операции.</p>
26
</ul><p>Первый вариант используется еще и для более краткой записи операции.</p>
27
<p>Выше - наглядный пример работы со слушателем. Перед тем как переходить к добавлению элементам обработчиков, потребуется сначала их получить. Для этого используется селектор. В него передается соответствующая функция (selector). Результатом становится набор найденных элементов в формате объекта jQuery.</p>
27
<p>Выше - наглядный пример работы со слушателем. Перед тем как переходить к добавлению элементам обработчиков, потребуется сначала их получить. Для этого используется селектор. В него передается соответствующая функция (selector). Результатом становится набор найденных элементов в формате объекта jQuery.</p>
28
<p>Метод on используется для присоединения одного или нескольких "слушателей" к заданному элементу. One работает аналогичным образом, но отличается тем, что выполнение обработчика происходит всего один раз при наступлении заданного "происшествия".</p>
28
<p>Метод on используется для присоединения одного или нескольких "слушателей" к заданному элементу. One работает аналогичным образом, но отличается тем, что выполнение обработчика происходит всего один раз при наступлении заданного "происшествия".</p>
29
<h3>Метод on ()</h3>
29
<h3>Метод on ()</h3>
30
<p>Метод on () в рассматриваемой библиотеке JS используется для присоединения к выбранным элементам функции обработчика событий. Применяется не только к одной "операции", но и к нескольким.</p>
30
<p>Метод on () в рассматриваемой библиотеке JS используется для присоединения к выбранным элементам функции обработчика событий. Применяется не только к одной "операции", но и к нескольким.</p>
31
<p>Синтаксис будет следующим:</p>
31
<p>Синтаксис будет следующим:</p>
32
<p>Это - вариант для назначения функции одного или нескольких событий. Здесь:</p>
32
<p>Это - вариант для назначения функции одного или нескольких событий. Здесь:</p>
33
<ul><li>events - это типы событий, которые будут обрабатываться;</li>
33
<ul><li>events - это типы событий, которые будут обрабатываться;</li>
34
<li>selector - селектор, по которому происходит фильтрация элементов, находящихся внутри уже обнаруженных;</li>
34
<li>selector - селектор, по которому происходит фильтрация элементов, находящихся внутри уже обнаруженных;</li>
35
<li>data - данные, передаваемые непосредственно обработчику событий (они размещаются в переменной event .data);</li>
35
<li>data - данные, передаваемые непосредственно обработчику событий (они размещаются в переменной event .data);</li>
36
<li>handler - функция, установленная в качестве обработчика.</li>
36
<li>handler - функция, установленная в качестве обработчика.</li>
37
</ul><p>Если вместо handler указать значение false, оно укажет на реализацию функции типа function () {return false;}.</p>
37
</ul><p>Если вместо handler указать значение false, оно укажет на реализацию функции типа function () {return false;}.</p>
38
<p>С помощью метода on () можно установить на выбранные элементы сразу несколько разных слушателей. Каждый из них будет реагировать на заданный тип события. Форма представления такой записи будет следующей:</p>
38
<p>С помощью метода on () можно установить на выбранные элементы сразу несколько разных слушателей. Каждый из них будет реагировать на заданный тип события. Форма представления такой записи будет следующей:</p>
39
<p>.</p>
39
<p>.</p>
40
<p>Здесь:</p>
40
<p>Здесь:</p>
41
<ul><li>eventMap - это объект, в котором необходимо перечислить типы обрабатываемых событий и соответствующие им слушатели;</li>
41
<ul><li>eventMap - это объект, в котором необходимо перечислить типы обрабатываемых событий и соответствующие им слушатели;</li>
42
<li>selector - селектор для фильтрации;</li>
42
<li>selector - селектор для фильтрации;</li>
43
<li>data - информация, которая будет передаваться слушателю.</li>
43
<li>data - информация, которая будет передаваться слушателю.</li>
44
</ul><p>А вот простой пример использования метода on в jQuery:</p>
44
</ul><p>А вот простой пример использования метода on в jQuery:</p>
45
<p>Этот метод появился в библиотеке в версии 1.7. Помог объединить три ранее существующих метода обработки "происшествий" на элементах HTML страницы: blind, live и delegate.</p>
45
<p>Этот метод появился в библиотеке в версии 1.7. Помог объединить три ранее существующих метода обработки "происшествий" на элементах HTML страницы: blind, live и delegate.</p>
46
<p>Убрать обработчик можно при помощи метода off, а для его срабатывания всего один раз - только через метод one.</p>
46
<p>Убрать обработчик можно при помощи метода off, а для его срабатывания всего один раз - только через метод one.</p>
47
<h4><em>Типы обрабатываемых событий</em></h4>
47
<h4><em>Типы обрабатываемых событий</em></h4>
48
<p>В виде первого параметра метода (типа) допускается использование любого строкового значения. При необходимости обработки одного из стандартных javascript-событий, рекомендуется пользоваться "обычными" обозначениями:</p>
48
<p>В виде первого параметра метода (типа) допускается использование любого строкового значения. При необходимости обработки одного из стандартных javascript-событий, рекомендуется пользоваться "обычными" обозначениями:</p>
49
<ul><li>error;</li>
49
<ul><li>error;</li>
50
<li>unload;</li>
50
<li>unload;</li>
51
<li>change;</li>
51
<li>change;</li>
52
<li>select и другими.</li>
52
<li>select и другими.</li>
53
</ul><p>Каждый соответствующий тип обладает одноименным методом, который выступает краткой формой on(). Пример - использование click (handler). Такая запись равноценна on ("click", handler).</p>
53
</ul><p>Каждый соответствующий тип обладает одноименным методом, который выступает краткой формой on(). Пример - использование click (handler). Такая запись равноценна on ("click", handler).</p>
54
<p>Когда тип события не совпадает ни с одним из имеющихся значений, оно будет рассматриваться библиотекой как пользовательское. Такие элементы будут организованы пользователями путем генерации через методы trigger и triggerHandler.</p>
54
<p>Когда тип события не совпадает ни с одним из имеющихся значений, оно будет рассматриваться библиотекой как пользовательское. Такие элементы будут организованы пользователями путем генерации через методы trigger и triggerHandler.</p>
55
<h5>Пространства имен</h5>
55
<h5>Пространства имен</h5>
56
<p>Тип "происшествий" иногда задается с указанием пространства имен. Пример - on (‘click.name’, handler). Здесь:</p>
56
<p>Тип "происшествий" иногда задается с указанием пространства имен. Пример - on (‘click.name’, handler). Здесь:</p>
57
<ul><li>name - это именное пространство;</li>
57
<ul><li>name - это именное пространство;</li>
58
<li>click - тип "происшествия".</li>
58
<li>click - тип "происшествия".</li>
59
</ul><p>Пространство имен - это элемент, который позволяет делить обработчики одних и тех же событий на подгруппы. Их можно будет легко вызвать через метод trigger или удалить через off.</p>
59
</ul><p>Пространство имен - это элемент, который позволяет делить обработчики одних и тех же событий на подгруппы. Их можно будет легко вызвать через метод trigger или удалить через off.</p>
60
<p>Допускается указание сразу нескольких именных пространств для выбранного элемента. Они пишутся через точку. Для обращения к таким "операциям" достаточно указать одно из них. Именные пространства напоминают классы в CSS.</p>
60
<p>Допускается указание сразу нескольких именных пространств для выбранного элемента. Они пишутся через точку. Для обращения к таким "операциям" достаточно указать одно из них. Именные пространства напоминают классы в CSS.</p>
61
<h4><em>Прямая и делегированная обработка</em></h4>
61
<h4><em>Прямая и делегированная обработка</em></h4>
62
<p>Если параметр selector не указан или имеет значение NULL, обработчик будет установлен на выбранные элементы. Он сработает тогда, когда произошло действие, непосредственно на соответствующих компонентах или "поднялось" от их потомков. Такой процесс называется прямым.</p>
62
<p>Если параметр selector не указан или имеет значение NULL, обработчик будет установлен на выбранные элементы. Он сработает тогда, когда произошло действие, непосредственно на соответствующих компонентах или "поднялось" от их потомков. Такой процесс называется прямым.</p>
63
<p>У непосредственной обработки есть недостатки. Пример - на странице имеет список (ul), на элементах которого должен срабатывать click. Если при установке соответствующих слушателей в список добавляются новые составляющие, они не будут реагировать на "клики". Связано это с тем, что связи с элементами устанавливались тогда, когда "нововведения" еще не существовали. Из-за этого не исключено возникновение большого количества логических ошибок.</p>
63
<p>У непосредственной обработки есть недостатки. Пример - на странице имеет список (ul), на элементах которого должен срабатывать click. Если при установке соответствующих слушателей в список добавляются новые составляющие, они не будут реагировать на "клики". Связано это с тем, что связи с элементами устанавливались тогда, когда "нововведения" еще не существовали. Из-за этого не исключено возникновение большого количества логических ошибок.</p>
64
<p>В jQuery для таких ситуаций придумана делегированная обработка событий. Здесь вместо заданного слушателя библиотека установит собственный специальный. Он не установится непосредственно на элементы, для которых используется слушатель (пусть такие "происшествия" называются inner элементы), а на содержащие их элементы (outer). Получится, что inner расположен внутри outer.</p>
64
<p>В jQuery для таких ситуаций придумана делегированная обработка событий. Здесь вместо заданного слушателя библиотека установит собственный специальный. Он не установится непосредственно на элементы, для которых используется слушатель (пусть такие "происшествия" называются inner элементы), а на содержащие их элементы (outer). Получится, что inner расположен внутри outer.</p>
65
<p>Как только событие происходит на одном из элементов inner, оно будет подниматься вверх по DOM-иерархии В какой-то момент этот компонент попадает в один из outer. На нем сработает специально установленный слушатель. Начнется проверка на поднятие от одного из inner элементов. Если это так, запустится обработчик handler.</p>
65
<p>Как только событие происходит на одном из элементов inner, оно будет подниматься вверх по DOM-иерархии В какой-то момент этот компонент попадает в один из outer. На нем сработает специально установленный слушатель. Начнется проверка на поднятие от одного из inner элементов. Если это так, запустится обработчик handler.</p>
66
<p>Когда использованы методы делегированной обработки, добавление новых inner элементов внутрь outer не будет нарушать работоспособность всего скрипта. События будут обрабатываться исправно, даже если они возникают в новых компонентах.</p>
66
<p>Когда использованы методы делегированной обработки, добавление новых inner элементов внутрь outer не будет нарушать работоспособность всего скрипта. События будут обрабатываться исправно, даже если они возникают в новых компонентах.</p>
67
<p>Для организации делегированной обработки потребуется во втором параметре метода on() установить селектор. Тогда:</p>
67
<p>Для организации делегированной обработки потребуется во втором параметре метода on() установить селектор. Тогда:</p>
68
<ul><li>outer элементы - это элементы, к которым применен выбранный метод;</li>
68
<ul><li>outer элементы - это элементы, к которым применен выбранный метод;</li>
69
<li>inner элементы - компоненты, расположенные внутри outer, а также удовлетворяющие заданному селектору.</li>
69
<li>inner элементы - компоненты, расположенные внутри outer, а также удовлетворяющие заданному селектору.</li>
70
</ul><p>Выше - наглядный пример в случае с click.</p>
70
</ul><p>Выше - наглядный пример в случае с click.</p>
71
<p>Чем выше то или иное событие располагается в иерархии, тем больше вычислительных ресурсов потребуется для его обработки.</p>
71
<p>Чем выше то или иное событие располагается в иерархии, тем больше вычислительных ресурсов потребуется для его обработки.</p>
72
<p>В браузерах событие load не всплывает вверх по иерархии, как и focus, blur. В Internet Explorer до 8 версии paste и reset тоже не имеют соответствующего свойства. Именно поэтому для них привязывать слушатели необходимо прямо на элементы, для которых генерируются "действия". От делегирования придется отказаться.</p>
72
<p>В браузерах событие load не всплывает вверх по иерархии, как и focus, blur. В Internet Explorer до 8 версии paste и reset тоже не имеют соответствующего свойства. Именно поэтому для них привязывать слушатели необходимо прямо на элементы, для которых генерируются "действия". От делегирования придется отказаться.</p>
73
<h4><em>Обработчики</em></h4>
73
<h4><em>Обработчики</em></h4>
74
<p>В виде параметра handler необходимо указывать функцию или значение false. Пример - анонимная функция:</p>
74
<p>В виде параметра handler необходимо указывать функцию или значение false. Пример - анонимная функция:</p>
75
<p>Допускается задание имени используемой функции:</p>
75
<p>Допускается задание имени используемой функции:</p>
76
<p>Когда происходит событие, библиотека передает в слушатель объект event (в нем содержатся дополнительные данные по "происшествию"). Соответствующий элемент отличается от стандартных, предоставляемых браузерами. В jQuery меняются некоторые поля для обеспечения кроссбраузерности. Это позволяет добраться до нативного объекта события. Он будет расположен в поле event.originalEvent.</p>
76
<p>Когда происходит событие, библиотека передает в слушатель объект event (в нем содержатся дополнительные данные по "происшествию"). Соответствующий элемент отличается от стандартных, предоставляемых браузерами. В jQuery меняются некоторые поля для обеспечения кроссбраузерности. Это позволяет добраться до нативного объекта события. Он будет расположен в поле event.originalEvent.</p>
77
<p>Событие после появления будет всегда всплывать по иерархии DOM до объекта document. Если в процессе обработки события всплытие нужно остановить, это делается через метод stopPropagation(). Он пишется внутри слушателя. Результатом станет то, что соответствующее событие прекратит дальнейшее всплытие по дереву DOM. Если в текущем элементе присутствовали иные невыполненные обработчики, они будут реализованы. Для исключения данной ситуации потребуется вместо stopPropagation использовать stopImmediatePropagation.</p>
77
<p>Событие после появления будет всегда всплывать по иерархии DOM до объекта document. Если в процессе обработки события всплытие нужно остановить, это делается через метод stopPropagation(). Он пишется внутри слушателя. Результатом станет то, что соответствующее событие прекратит дальнейшее всплытие по дереву DOM. Если в текущем элементе присутствовали иные невыполненные обработчики, они будут реализованы. Для исключения данной ситуации потребуется вместо stopPropagation использовать stopImmediatePropagation.</p>
78
<p>События могут порождать связанные с ними действия. Пример - сразу после того, как пользователь нажал на ссылку, происходит переход на другую страничку. Для отмены соответствующий операций внутри обработчика можно вызвать event. preventDefault.</p>
78
<p>События могут порождать связанные с ними действия. Пример - сразу после того, как пользователь нажал на ссылку, происходит переход на другую страничку. Для отмены соответствующий операций внутри обработчика можно вызвать event. preventDefault.</p>
79
<p>Допускается указание false вместо параметра. В этом случае event.stopPropagation и event.preventDefault вызываются автоматически. Форма представления метода:</p>
79
<p>Допускается указание false вместо параметра. В этом случае event.stopPropagation и event.preventDefault вызываются автоматически. Форма представления метода:</p>
80
<p>Здесь при нажатии по ссылкам с классом disabled не происходит переход на другие страницы. Событие не передается родительским элементам.</p>
80
<p>Здесь при нажатии по ссылкам с классом disabled не происходит переход на другие страницы. Событие не передается родительским элементам.</p>
81
<p>Внутри обработчика переменная this всегда включает в себя DOM элемент, на котором событие отлавливается. Во время прямой обработки им станет один из выбранных элементов, при делегированной - компонент, находящийся внутри одного из выбранных элементов, а также удовлетворяющий параметру selector. Создание объекта jQuery по this-компоненту возможно так: $(this).</p>
81
<p>Внутри обработчика переменная this всегда включает в себя DOM элемент, на котором событие отлавливается. Во время прямой обработки им станет один из выбранных элементов, при делегированной - компонент, находящийся внутри одного из выбранных элементов, а также удовлетворяющий параметру selector. Создание объекта jQuery по this-компоненту возможно так: $(this).</p>
82
<h4><em>Дополнительные данные для слушателя</em></h4>
82
<h4><em>Дополнительные данные для слушателя</em></h4>
83
<p>При изучении on событий в jQuery можно передавать в "происшествия" дополнительные данные. Для этого используется параметр data. Если он задан, то соответствующий элемент станет доступным в обработчике в event.data.</p>
83
<p>При изучении on событий в jQuery можно передавать в "происшествия" дополнительные данные. Для этого используется параметр data. Если он задан, то соответствующий элемент станет доступным в обработчике в event.data.</p>
84
<p>Данный параметр поддерживает передачу информации любого типа, но следует быть аккуратнее при работе со строками. Если передается string, а селектор не установлен, библиотека рассмотрит соответствующий объект в качестве selector-параметра. Исправить ситуацию удается при помощи присваивания null имеющемуся селектору. Data можно задать через объекты. С их помощью слушатель сможет передавать сразу много информации.</p>
84
<p>Данный параметр поддерживает передачу информации любого типа, но следует быть аккуратнее при работе со строками. Если передается string, а селектор не установлен, библиотека рассмотрит соответствующий объект в качестве selector-параметра. Исправить ситуацию удается при помощи присваивания null имеющемуся селектору. Data можно задать через объекты. С их помощью слушатель сможет передавать сразу много информации.</p>
85
<p>Кроме data передать дополнительные параметры в обработчик можно через ручной вызов события методами trigger и triggerhandler.</p>
85
<p>Кроме data передать дополнительные параметры в обработчик можно через ручной вызов события методами trigger и triggerhandler.</p>
86
<h3>Метод one</h3>
86
<h3>Метод one</h3>
87
<p>Метод one является единственным в библиотеке, используемым для однократной обработки событий. Он устанавливает слушатель на элементы страницы. В каждом из них он может быть вызван не более одного раза.</p>
87
<p>Метод one является единственным в библиотеке, используемым для однократной обработки событий. Он устанавливает слушатель на элементы страницы. В каждом из них он может быть вызван не более одного раза.</p>
88
<p>Форма представления метода:</p>
88
<p>Форма представления метода:</p>
89
<p>Здесь:</p>
89
<p>Здесь:</p>
90
<ul><li>eventType - тип события, подлежащего обработке;</li>
90
<ul><li>eventType - тип события, подлежащего обработке;</li>
91
<li>eventData -передаваемые данные;</li>
91
<li>eventData -передаваемые данные;</li>
92
<li>handler (eventObject) - функция, которая устанавливается в качестве слушателя.</li>
92
<li>handler (eventObject) - функция, которая устанавливается в качестве слушателя.</li>
93
</ul><p>Выше - пример установки обработчика через метод one. Убрать его получится при помощи unbind().</p>
93
</ul><p>Выше - пример установки обработчика через метод one. Убрать его получится при помощи unbind().</p>
94
<h3>Дополнительная информация о событии</h3>
94
<h3>Дополнительная информация о событии</h3>
95
<p>При обработке "происшествий" о нем можно получить дополнительную информацию. Соответствующие данные передаются в качестве первого аргумента объекта Event.</p>
95
<p>При обработке "происшествий" о нем можно получить дополнительную информацию. Соответствующие данные передаются в качестве первого аргумента объекта Event.</p>
96
<p>Выше - пример кода, который поможет вывести дополнительную информацию о том или ином событии.</p>
96
<p>Выше - пример кода, который поможет вывести дополнительную информацию о том или ином событии.</p>
97
<h2>Как быстро выучить</h2>
97
<h2>Как быстро выучить</h2>
98
<p>JQuery - достаточно функциональная библиотека. Выучить ее самостоятельно с нуля бывает проблематично, особенно новичкам. Чтобы быстрее разобраться с JS и его инструментами, рекомендуется закончить специализированные компьютерные курсы. Пример - от образовательного центра OTUS.</p>
98
<p>JQuery - достаточно функциональная библиотека. Выучить ее самостоятельно с нуля бывает проблематично, особенно новичкам. Чтобы быстрее разобраться с JS и его инструментами, рекомендуется закончить специализированные компьютерные курсы. Пример - от образовательного центра OTUS.</p>
99
<p>Их преимущества - это:</p>
99
<p>Их преимущества - это:</p>
100
<ol><li>Сжатые сроки обучения и грамотно составленная программа. Выбранное направление можно освоить в период до 12 месяцев.</li>
100
<ol><li>Сжатые сроки обучения и грамотно составленная программа. Выбранное направление можно освоить в период до 12 месяцев.</li>
101
<li>Постоянное кураторство и организация занятий полностью через интернет. Учебу легко совмещать с работой, семьей и даже хобби.</li>
101
<li>Постоянное кураторство и организация занятий полностью через интернет. Учебу легко совмещать с работой, семьей и даже хобби.</li>
102
<li>Разнообразие направлений. Интересные предложения будут найдены не только для новичков, но и для уже опытных программистов.</li>
102
<li>Разнообразие направлений. Интересные предложения будут найдены не только для новичков, но и для уже опытных программистов.</li>
103
<li>Возможность освоить не только JS и jQuery, но и другие языки разработки "с нуля".</li>
103
<li>Возможность освоить не только JS и jQuery, но и другие языки разработки "с нуля".</li>
104
<li>Интересные домашние и практические задания.</li>
104
<li>Интересные домашние и практические задания.</li>
105
</ol><p>В конце каждого успешно завершенного курса ученики будут получать электронные сертификаты. Это документальное подтверждение приобретенных знаний и навыков в выбранном направлении.</p>
105
</ol><p>В конце каждого успешно завершенного курса ученики будут получать электронные сертификаты. Это документальное подтверждение приобретенных знаний и навыков в выбранном направлении.</p>
106
<p>Интересует <a>JavaScript? Добро пожаловать на курс в Otus</a>!</p>
106
<p>Интересует <a>JavaScript? Добро пожаловать на курс в Otus</a>!</p>
107
107