me@helium 8 years ago
parent
commit
d4861a12c5
1 changed files with 153 additions and 0 deletions
  1. 153 0
      jQuery02.md

+ 153 - 0
jQuery02.md

@@ -0,0 +1,153 @@
+# jQuery 2
+
+## События. Delegated events, `on`, `trigger`, propagation.
+
+При динамическом (используя **DOM** `createElement` или `$("<tag>")`) создании элементов возникает следующая проблема - обработчики
+событий, назначенные *до* создания элемента какой-то группе элементов по селектору **не** работают для новосозданных элементов.
+
+**Рассмотрим пример:**
+
+```html
+    <body>
+        <button>first button</button>
+
+    </body>
+```
+
+```javascript
+$(document).ready(function(){
+    $("button").click(function(){
+        alert("click");
+    });
+    var otherButton = $("<button>");
+    otherButton.html("second button");
+    $(document.body).append(otherButton);
+});
+```
+
+В примере выше мы создаем обработчик для *всех* кнопок. На момент назначения обработчика кнопка существует только одна. Далее динамически создается
+еще одна кнопка `otherButton` с текстом `second button` и добавляется в `body`. Этой кнопке обработчик `click` *не* назначен, так как её *не существовало*
+на момент назначения.
+
+https://repl.it/E8Fc/0
+
+### Delegated events, `on`.
+
+#### `on`
+
+Практически все события типа `click`, `keydown` являются сокращениями для `on`. Например `click` из примера выше аналогичен следующему коду:
+
+```javascript
+    $("button").on("click",function(){
+        alert("click");
+    });
+```
+
+#### Делегированные события
+
+Для назначения событий и для будущих элементов (такие события называются **Delegated events**) используется `on` для родительского элемента с указанием
+селектора дочерних элементов. После этого добавления дочерних элементов отслеживается и обработчики работают и для новых элементов:
+
+```javascript
+    $(document.body).on("click", "button", function(){
+        alert("click");
+    });
+```
+
+Вместо назначения обработчика `click` для всех элементов `button` выше мы указываем в каком элементе (`document.body`) для каких дочерних элементов
+(`"button"`) назначить обработчик события `"click"` *отныне и навсегда*, т. е. создать делегированное событие.
+
+https://repl.it/E8Fc/1
+
+### Инициируем событие, `trigger`
+
+На каждое событие может быть назначено *более одного* обработчика:
+
+```javascript
+    $(document.body).on("click", "button", function(){
+        alert("click");
+    });
+    $(document.body).on("click", "button", function(){
+        alert("click 2");
+    });
+```
+
+В таком случае срабатывают оба обработчика *в порядке определения*.
+
+Для запуска обработчиков события используйте `trigger`:
+
+```javascript
+    $("button").trigger("click");
+```
+
+Таким образом можете имитировать любые события, или запустить сложную цепочку обработчиков, если она не выделена у вас в отдельную функцию. Так же
+это полезный прием для автоматизации чужих сайтов, если применить это, например, с **TamperMonkey**.
+
+https://repl.it/E8Fc/4
+
+### Управление обработкой события
+
+Можно назначать события элементам, вложенным друг в друга, например `click` кнопке и элементу, в котором кнопка находится:
+
+```javascript
+    $(document.body).on("click", function(){
+        alert("body click");
+    });
+```
+
+Обратите внимание, что тут создается *обычное*, а не *делегированное* событие, так как второй параметр - не селектор вложенных элементов, а 
+обработчик события. Так работает `on`. При клике на кнопку так же происходит клик на элемент `body`, в котором эта кнопка находится. Это называется
+**всплытием события**. Подобное поведение не всегда нужно, рассмотрим функции, с помощью которых мы можем изменить эту логику.
+
+https://repl.it/E8Fc/5
+
+#### `stopPropagation`
+
+Это функция-метод объекта события, который передается в качестве первого параметра в обработчик события. Используя его вы можете прервать всплытие события:
+
+```javascript
+    $(document.body).on("click", "button", function(evt){
+        evt.stopPropagation();
+        alert("click");
+    });
+```
+
+После `stopPropagation()` событие *не* будет инициировано и обработано в вышележащих элементах (`body` в нашем примере)
+
+https://repl.it/E8Fc/6 
+
+#### `stopImmediatePropagation`
+
+Работает так же, однако прерывает обработку не только событий в вышележащих элементах, но и в следующих обработчиках *этого* элемента:
+
+```javascript
+    $(document.body).on("click", "button", function(evt){
+        evt.stopImmediatePropagation();
+        alert("click");
+    });
+```
+
+https://repl.it/E8Fc/7
+
+
+#### `preventDefault`
+
+#### `false`
+
+
+## jQuery UI
+
+### Что это, зачем и как подключить
+
+### jQuery UI как стандарт реализации API плагинов jQuery
+
+#### Инициализация
+
+#### Методы
+
+## Chaining
+
+## AJAX/AJAJ
+
+### GET и POST
+