Записи с меткой "jQuery"
AJAX
jQuery(..).load
-
url запрашиваемой страницы
-
передаваемые данные (необязательный параметр)
-
функция которой будет скормлен результат (необязательный параметр)
// по окончанию загрузки страницы
$(document).ready(function(){
// вешаем на клик по элементу с id = example-1
$('#example-1').click(function(){
// загрузку HTML кода из файла example.html
$(this).load('ajax/example.html');
})
});
Example<br/>
Data Loaded By AJAX<br/>
Bye-Bye
jQuery.ajax
-
async — асинхронность запроса, по умолчанию true
-
cache — вкл/выкл кэширование данных браузером, по умолчанию true
-
contentType — по умолчанию «application/x-www-form-urlencoded»
-
data— передаваемые данные — строка иль объект
-
dataFilter — фильтр для входных данных
-
dataType— тип данных возвращаемых в callback функцию (xml, html, script, json, text, _default)
-
global — тригер — отвечает за использование глобальных AJAX Event'ов, по умолчанию true
-
ifModified — тригер — проверяет были ли изменения в ответе сервера, дабы не слать еще запрос, по умолчанию false
-
jsonp — переустановить имя callback функции для работы с JSONP (по умолчанию генерируется на лету)
-
processData — по умолчанию отправляемые данный заворачиваются в объект, и отправляются как «application/x-www-form-urlencoded», если надо иначе — отключаем
-
scriptCharset — кодировочка — актуально для JSONP и подгрузки JavaScript'ов
-
timeout — время таймаут в миллисекундах
-
type— GET либо POST
-
url— url запрашиваемой страницы
-
beforeSend — срабатывает перед отправкой запроса
-
error — если произошла ошибка
-
success — если ошибок не возникло
-
complete — срабатывает по окончанию запроса
-
username — логин
-
password — пароль
$.ajax({
url: '/ajax/example.html', // указываем URL и
dataType : "json", // тип загружаемых данных
success: function (data, textStatus) { // вешаем свой обработчик на функцию success
$.each(data, function(i, val) { // обрабатываем полученные данные
/* ... */
});
}
});
jQuery.get
-
url запрашиваемой страницы
-
передаваемые данные (необязательный параметр)
-
callback функция, которой будет скормлен результат (необязательный параметр)
-
тип данных возвращаемых в callback функцию (xml, html, script, json, text, _default)
jQuery.post
-
url запрашиваемой страницы
-
передаваемые данные (необязательный параметр)
-
callback функция, которой будет скормлен результат (необязательный параметр)
-
тип данных возвращаемых в callback функцию (xml, html, script, json, text, _default)
$(document).ready(function(){ // по завершению загрузки страницы
$('#example-3').click(function(){ // вешаем на клик по элементу с id = example-3
$.post('ajax/example.xml', {}, function(xml){ // загрузку XML из файла example.xml
$('#example-3').html('');
$(xml).find('note').each(function(){ // заполняем DOM элемент данными из XML
$('#example-3').append('To: ' + $(this).find('to').text() + '<br/>')
.append('From: ' + $(this).find('from').text() + '<br/>')
.append('<b>' + $(this).find('heading').text() + '</b><br/>')
.append( $(this).find('body').text() + '<br/>');
});
}, 'xml'); // указываем явно тип данных
})
});
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
jQuery.getJSON
-
url запрашиваемой страницы
-
передаваемые данные (необязательный параметр)
-
callback функция, которой будет скормлен результат (необязательный параметр)
$(document).ready(function(){ // по завершению загрузки страницы
$('#example-4').click(function(){ // вешаем на клик по элементу с id = example-4
$.getJSON('ajax/example.json', {}, function(json){ // загрузку JSON данных из файла example.json
$('#example-4').html('');
// заполняем DOM элемент данными из JSON объекта
$('#example-4').append('To: ' + json.note.to + '<br/>')
.append('From: ' + json.note.from + '<br/>')
.append('<b>' + json.note.heading + '</b><br/>')
.append( json.note.body + '<br/>');
});
})
});
{
note:{
to:'Tove',
from:'Jani',
heading:'Reminder',
body:'Don\'t forget me this weekend!'
}
}
jQuery.getScript
-
url запрашиваемого скрипта
-
callback функция, которой будет скормлен результат (необязательный параметр)
JavaScript:
$(document).ready(function(){ // по завершению загрузки страницы
$('#example-5').click(function(){ // вешаем на клик по элементу с id = example-5
$.getScript('ajax/example.js', function(){ // загрузку JavaScript'а из файла example.js
testAjax(); // выполняем загруженный JavaScript
});
})
});
function testAjax() {
$('#example-5').html('Test completed'); // изменяем элемент с id = example-5
}
Отправка Формы
Примеры использования JSONP

http://api.domain.com/?type=jsonp&query=test&callback=?
События
$("#loading").bind("ajaxSend", function(){
$(this).show(); // показываем элемент
}).bind("ajaxComplete", function(){
$(this).hide(); // скрываем элемент
});
$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ...
});

-
ajaxStart— Данный метод вызывается в случае когда побежал AJAX запрос, и при этом других запросов нету
-
beforeSend— Срабатывает до отправки запроса, позволяет редактировать XMLHttpRequest. Локальное событие
-
ajaxSend— Срабатывает до отправки запроса, аналогично beforeSend
-
success— Срабатывает по возвращению ответа, когда нет ошибок ни сервера, ни вернувшихся данных. Локальное событие
-
ajaxSuccess— Срабатывает по возвращению ответа, аналогично success
-
error— Срабатывает в случае ошибки. Локальное событие
-
ajaxError— Срабатывает в случае ошибки
-
complete— Срабатывает по завершению текущего AJAX запроса (с ошибкои или без — срабатывает всегда).Локальное событие
-
ajaxComplete— Глобальное событие, аналогичное complete
-
ajaxStop— Данный метод вызывается в случае когда больше нету активных запросов
Bootstrap 5.3. Закрыть cворачиваемое содержимое при клике вне элемента
<button class="btn btn-primary show-element" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
Кнопка с data-target
</button>
<div class="collapse" id="collapseExample">
<div class="card card-body">
Кстати, диаграммы связей, вне зависимости от их уровня, должны быть рассмотрены исключительно в разрезе маркетинговых и финансовых предпосылок. Каждый из нас понимает очевидную вещь: высокотехнологичная концепция общественного уклада в значительной степени обусловливает важность существующих финансовых и административных условий. И нет сомнений, что некоторые особенности внутренней политики лишь добавляют фракционных разногласий и объявлены нарушающими общечеловеческие нормы этики и морали. Банальные, но неопровержимые выводы, а также независимые государства формируют глобальную экономическую сеть и при этом — подвергнуты целой серии независимых исследований.
</div>
</div>
$(document).mouseup( function(e){ // событие клика по веб-документу
var div = $( "#collapseExample.show" ); // здесь указываем сворачиваемое содержимое
if ( !div.is(e.target) // если клик был не по нашему сворачиваемому содержимому
&& div.has(e.target).length === 0 ) { // и не по его дочерним элементам
$('.show-element').addClass('collapsed'); // добавляем кнопке класс .collapsed
$('.propertyInput.show').removeClass('show'); // удаляем у сворачиваемого содержимого класс .show
}
});
Slick Slider в модальном окне Bootstrap
Чтобы решить эту проблему добавляем небольшой код на jQuery, который инициализирует Slick Slider в момент открытия модального окна и наоборот, отменит инициализацию после закрытия окна.
$('#modal').on('shown.bs.modal', function() { // запускаем модальное окно
$('#modal .slick-slider').not('.slick-initialized').slick(); // если slick slider не инициализирован, то делаем это
$('#modal .slick-slider').slick('refresh');
});
$('#modal').on('hidden.bs.modal', function() { // закрываем модальное окно
$('#modal .slick-slider').slick('unslick').empty(); // после закрытия модального окна отменяем инициализацию slick slider
});
Slick Slider. Подключение файла скрипта
$.getScript("/js/slick.min.js", function(){// подключаем скрипт slick-слайдера
$('.slider-for').slick({
infinite: false,
slidesToShow: 1,
slidesToScroll: 1,
fade: true,
arrows: true,
nextArrow: '',
prevArrow: '',
asNavFor: '.thumb-slider'
});
Время прочтения статьи на jQuery и чистом JavaScript
Время прочтения (или просто чтения) — это оценка, сколько времени потребуется среднему человеку, чтобы прочитать текст. Обычно оно рассчитывается на основе количества слов в статье, а также учитывает такие факторы, как:
- Длина текста. Чем длиннее текст, тем больше времени потребуется на его прочтение.
- Сложность текста. Сложные тексты с большим количеством технических терминов и сложных предложений требуют больше времени для понимания.
- Размер шрифта. Крупный шрифт облегчает чтение, а мелкий, наоборот, усложняет его.
- Наличие изображений. Изображения могут сделать текст более привлекательным, но они также могут замедлить чтение, если их слишком много.
Реализация на jQuery
Ниже представлен код на jQuery для реализации функции расчета времени чтения. В нем реализовано склонение «минут» в зависимости от цифр и гибкая настройка (вы самостоятельно можете сами примерную скорость чтения в минуту – так будет формироваться общее время чтения статьи), также есть возможность включить картинки в общее время прочтения.
За настройки отвечают параметры (находятся в последних строках):
images — время в секундах, которое уходит на просмотр одного изображения;
wpm — среднее количество слов, которое человек читает в минуту.
(function($) {
$.fn.readtime = function(options) {
// Значения по умолчанию
var defaults = {
format: '#',
wrapper: 'time',
images: 7, // Время на одно изображение (в секундах)
wpm: 250 // Скорость чтения (слов в минуту)
};
// Объединяем переданные параметры с настройками по умолчанию
options = $.extend(defaults, options);
return this.each(function() {
// Получаем текстовое содержимое элемента
var text = this.textContent || this.innerText || '';
// Подсчитываем количество слов в тексте
var words = text.replace(/(^\s*)|(\s*$)/gi, '')
.replace(/[ ]{2,}/gi, ' ')
.replace(/\n /, '\n')
.split(' ').length;
// Рассчитываем время на основе количества слов
var time = (words / options.wpm) * 60;
// Добавляем время на изображения
if (options.images) {
time += ($(this).find('img').length * options.images);
}
// Округляем до ближайшего целого числа и переводим в минуты
time = Math.round(time / 60);
// Форматируем выводимое значение
time = options.format.replace(/#/, time);
// Создаем элемент для отображения времени
var element = document.createElement(options.wrapper);
// Функция для склонения слова "минута"
function declOfNum(number, titles) {
cases = [2, 0, 1, 1, 1, 2];
return titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]];
}
var title = declOfNum(time, ['минута', 'минуты', 'минут']);
// Вставляем результат в элемент с классом .time_read
$('.time_read').html(time + ' ' + title);
});
};
}(jQuery));
// Используем плагин с настройками
$(".text_read").readtime({
images: 7,
wpm: 250
});
- Значения по умолчанию. Определяем значения по умолчанию для скорости чтения и времени на изображение.
- Подсчет слов. Извлекаем текст из элемента и подсчитываем количество слов.
- Добавление времени на изображения. Если в элементе есть изображения, добавляем к общему времени чтения дополнительные секунды.
- Форматирование результата. Используем функцию
declOfNumдля правильного склонения слова «минута» в зависимости от значения. - Вывод результата. Вставляем результат в элемент с классом
.time_read.
Если на странице текст будет меньше среднего количества слов указанных в параметре
wpm, то скрипт будет выводить время прочтения 0. Чтобы исправить это найдите в скрипте строчку:title=declOfNum(time,['минута','минуты','минут']);и над ней вставьте:if(time == 0) { var time = 1; }.
Реализация на чистом JavaScript
Теперь посмотрим, как можно реализовать тот же функционал, но уже без jQuery.
(function() {
function readtime(selector, options) {
// Значения по умолчанию
const defaults = {
format: '#',
wrapper: 'time',
images: 7, // Время на каждое изображение (в секундах)
wpm: 250 // Скорость чтения (слов в минуту)
};
// Объединяем параметры с настройками по умолчанию
options = Object.assign({}, defaults, options);
// Функция для склонения слова "минута" в зависимости от числа
function declOfNum(number, titles) {
const cases = [2, 0, 1, 1, 1, 2];
return titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]];
}
// Получаем все элементы, соответствующие переданному селектору
const elements = document.querySelectorAll(selector);
elements.forEach(element => {
// Получаем текстовое содержимое элемента
const text = element.textContent || element.innerText || '';
// Считаем количество слов в тексте
const words = text.trim().replace(/[ ]{2,}/g, ' ').split(' ').length;
// Расчет времени на основе количества слов
let time = (words / options.wpm) * 60;
// Добавляем время на изображения, если есть
if (options.images) {
time += (element.querySelectorAll('img').length * options.images);
}
// Округляем и преобразуем в минуты
time = Math.round(time / 60);
// Форматируем выводимое значение
const formattedTime = options.format.replace(/#/, time);
// Создаем элемент для отображения времени
const timeElement = document.createElement(options.wrapper);
const title = declOfNum(time, ['минута', 'минуты', 'минут']);
// Добавляем текст с временем и склонением
timeElement.textContent = `${formattedTime} ${title}`;
// Вставляем время чтения в элемент с классом .time_read
const timeReadElement = document.querySelector('.time_read');
if (timeReadElement) {
timeReadElement.innerHTML = ''; // Очищаем перед вставкой
timeReadElement.appendChild(timeElement);
}
});
}
// Используем функцию readtime с нужным селектором и параметрами
readtime(".text_read", {
images: 7,
wpm: 250
});
})();
- Настройки по умолчанию. Как и в jQuery-версии, заданы значения по умолчанию для скорости чтения и времени на изображение.
- Подсчет слов. Используется
textContentилиinnerText, чтобы извлечь текст и посчитать количество слов. - Добавление времени для изображений. Время увеличивается в зависимости от количества изображений в элементе.
- Форматирование результата. Результат округляется и форматируется с правильным склонением слова «минута».
- Отображение результата. Вставляем результат в элемент
.time_read.
Использование jQuery Validate для проверки форм
<script>
$(function() {
$(".validate").validate({
focusInvalid: true,
errorClass: "input_error",
onkeyup: false,
onfocusout: false,
rules: {
captcha: {
required: true,
remote: '/forms/'
},
author: "required",
text: "required",
email: {
required: true,
email: true
}
},
messages: {
author: "Пожалуйста, укажите своё Имя!",
text: "Пожалуйста, напишите свой комментарий!",
captcha: "Вы не вписали контрольное число!",
email: {
required: "Введите свой email",
email: "E-mail должен быть в формате name@domain.com"
}
}});
});
</script>
Core_Page::instance()
// jQuery
->js('/hostcmsfiles/jquery/jquery.min.js')
...
// Validate
->js('/hostcmsfiles/jquery/jquery.validate.min.js')
...
->showJs();
Указание валидации формы
<script>
$(".validate").validate();
</script>
Валидация всех форм:
<script>
$("form").validate();
</script>
Способы валидации форм
Использование имена классов как правила
<form action="." method="post" class="validate">
<input type="text" name="name" value="" class="required" />
<input type="submit" value="Submit" />
</form>
<form action="." method="post" class="validate">
<input type="text" name="name" value="" class="name" />
<input type="text" name="zip" value="" class="zip" />
<input type="submit" value="Submit" />
</form>
<script >
$.validator.addClassRules("name", {
required: true,
minlength: 2
});
</script >
<script >
$.validator.addClassRules({
name: {
required: true,
minlength: 2
},
zip: {
required: true,
digits: true,
minlength: 5,
maxlength: 5
}});
</script >
Передача опций при инициализации validate()
<script >
$(".validate").validate({
rules: {
name: "required",
email: {
required: true,
email: true
}
},
messages: {
name: "Please specify your name",
email: {
required: "Введите свой email",
email: "E-mail должен быть в формате name@domain.com"
}
}});
</script >
-
required — поле обязательное для заполнения (true или false);
-
remote — указывается файл для проверки поля (например: "check.php");
-
email — проверяет корректность e-mail адреса (true или false);
-
url — проверяет корректность url адреса (true или false);
-
date — проверка корректности даты (true или false);
-
dateISO — проверка корректности даты ISO (true или false);
-
number — проверка на число (true или false);
-
digits — только цифры (true или false);
-
creditcard — корректность номера кредитной карты (true или false);
-
equalTo — равное чему-то (например другому полю equalTo: "#pswd");
-
accept — проверка на правильное расширение (accept: "xls|csv");
-
maxlength — максимальное кол-во символов;
-
minlength — минимальное кол-во символов;
-
rangelength — кол-во символов от скольких и до скольких (rangelength: [2, 5]);
-
range — число должно быть в диапазоне от и до (range: [2, 12]);
-
max — максимальное значение числа;
-
min — минимальное значение числа.
Пример использования в XSL-шаблоне
<script >
$(".validate").validate({
rules: {
surname: "required",
name: "required",
email: {
required: true,
email: true
}
},
messages: {
surname: "Введите фамилию!",
name: "Введите имя!",
email: {
required: "Введите e-mail!",
email: "Адрес должен быть вида name@domain.com"
}
},
focusInvalid: true,
errorClass: "input_error"
});
</script>
Проверка валидации и заблокированного E-mail нежелательного Пользователя<SCRIPT>
$(document).ready(function() {
$('.select2').addClass('required');
$("#form<xsl:value-of select="@id" />").submit(function (event) {
event.preventDefault();
var eml = $('input[name=email]').val();
if(eml =='svinya.svintus@yandex.ru') {
alert ('Вы не можете отправлять нам письма');
$(location).attr('href', '/');
}else{
$(this).validate({
focusInvalid: true,
errorClass: "input_error"
});
}
});
});
</SCRIPT>
Модальное окно с формой подписки и сохранением куки на jQuery

Добавляем в макет код показа формы:
<?php
// add ФОРМА ПОДПИСКА ЗА СКИДКУ
$oForm = Core_Entity::factory('Form', 49); // заменить ID формы
$Form_Controller_Show = new Form_Controller_Show($oForm);
if (!is_null(Core_Array::getPost($oForm->button_name)))
{
$Form_Controller_Show
->values($_POST + $_FILES)
// 0 - html, 1- plain text
->mailType(0)
->mailXsl(
Core_Entity::factory('Xsl')->getByName('ПисьмоКураторуФормыВФорматеHTML')
)
->mailFromFieldName('email')
->process();
}
$Form_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('ОтобразитьФормуВМодальномОкне')
)
->show();
?>
Подключаем в макете скрипт jquery.cookie.min.js:
<script src="/js/jquery.cookie.min.js"></script>
Проверяем куки:
<script>
$(document).ready(function($) {
if ($.cookie('was') == null) {
// Покажем всплывающее окно
setTimeout(function(){$('#popupModal').modal('show');}, 36000);
}
// Запомним в куках, что посетитель к нам уже заходил
$.cookie('was', 'value', { expires: 2, path: '/' });
});
</script>JavaScript / jQuery . jquery.cookie.min.js
Работа плагина jQuery validate изнутри
Как валидировать форму
1. Использовать имена классов как правила
<form action="/" method="post">
<input id="Name" type="text" name="Name" value="" class ="required" />
<input type="submit" value="Submit" />
</form>
Использование метода «addClassRules»
$.validator.addClassRules({
name: {
required: true,
minlength: 2
},
zip: {
required: true,
digits: true,
minlength: 5,
maxlength: 5
}
});
<input class="zip" type="text" name="zipCode" />
$.validator.addMethod("newrequired", $.validator.methods.required, "new name is required");
2. Добавление правил как JSON объекта к методу validate()
<form>
<input id="something" type="text" name="userEmail" />
<input id="submit" type="submit" value="submit" />
</form>
$('form').validate({
rules: {
userEmail: {
email: true,
required: true
}
}
});
- Этот подход дает нам возможность использовать больше правил валидации, которые принимают аргументы, такие как minlength, remote, equalTo и т.д.
- Отличный и настраиваемый вручную контроль над всем.
- Но пользователь должен делать отдельную функцию «validate» с разными опциями для каждой формы.
Добавление или удаление динамических правил.
Добавление правил
$('.input').rules('add', {
required: true,
messages: {
required: true
}
})
Удаление правил
$('.input').rules('remove', 'min max');
Подход настройки вручную
var validator = $('form').data('validator');
validator.settings.rules.objectName = {
required: true
}
$.extend(validator.settings, { rules: rules, messages: messages });
Сообщения валидации и как они работают
$('form').validate({
rules: {
userEmail: {
email: true,
required: true
}
},
messages: {
userEmail: {
email: "Please enter your email",
required: "*"
}
}
});
<input id="Email" title="you have to enter a value" type="text" name="Email" />
Добавление собственных правил валидации
$.validator.addMethod
-
имя правила;
-
функцию, которая осуществляет валидацию;
-
сообщение по умолчанию.
$('form').validate({
rules: {
firstname: {
compare: {
type: "notequal",
otherprop: "lastname"
}
}
}
});
$.validator.addMethod("notnumbers", function(value, element) {
return !/[0-9]*/.test(value);
},
"Please don't insert numbers.")
Что именно происходит, когда мы вызываем метод «validate»
//getting the validator
var validator = $("selector").data("validator")
var validator = $(".selector").validate(/* rules will be omitted */)
Присоединение событий формы
$(".selector").validate({
onfocusout: false,
onkeyup: false,
onclick: false,
onsubmit: false
});
Сенсорный эффект прокрутки полной страницы - ScrollingMagic.js
Пользователи могут перемещаться между блоками прокрутки с помощью колесика мыши, клавиш со стрелками и сенсорных жестов.
Как его использовать:
<sections class="scrolling-block">
Section 1
</sections>
<sections class="scrolling-block">
Section 2
</sections>
<sections class="scrolling-block">
Section 3
</sections>
...
html {
width:100%;
scrollbar-width:none;
/* Also needed to disable scrollbar Firefox */
-ms-overflow-style:none;
/* Disable scrollbar IE 10+ */
}
@-moz-document url-prefix() {
/* Disable scrollbar Firefox */
html {
scrollbar-width:none;
}
}
html::-webkit-scrollbar {
/* Disable scrollbar Chrome/Safari/Webkit */
width:0px;
background:transparent;
}
.scrolling-block {
display: flex;
justify-content:center;
align-items:center;
background-color: rgba(0,0,0,0.5);
width:100%;
min-height: fit-content;
height:100vh;
position:relative;
}
.scrolling-block img {
width:auto;
max-width:100%;
height:100%;
object-fit: cover;
}
.scrolling-block.invise {
opacity:0;
transition: opacity0.5s ease-in;
}
.scrolling-block.active {
opacity:1;
transition: opacity0.5s ease-in;
}
<script src="/path/to/cdn/jquery.min.js"></script>
<script src="/path/to/scrollingMagic.js"></script>
let delayWheel = 400;
let delayTouch = 400;
let delayKey = 700;
window.addEventListener('scroll',
(e) => {
e.preventDefault()
if (counter !== sections.length - 1) {
if ((document.documentElement.clientWidth >= 320)) {
window.scrollTo(0,
sections[counter].offsetTop - (
document.documentElement.clientHeight - (sections[counter].clientHeight)) / 2
)
}
}
})
function InitTouchScroll() {
if (document.documentElement.clientWidth >= 320) {
window.addEventListener('touchmove', touchmove,
{passive:false})
window.addEventListener('touchstart', touchstart, {passive:false})
window.addEventListener(
"touchend",
touchend,
{passive:false}
);
}else {
window.removeEventListener('touchmove', touchmove,)
window.removeEventListener('touchstart', touchstart,)
window.removeEventListener('touchend', touchend,)
}
}
https://www.jqueryscript.net/demo/touch-fullpage-scrolling-magic/
События и их обработка в jQuery
Обработка событий с помощью методов jQuery

// функция on
.on(events,handler);
// функция one
.one(events,handler);
// events - событие или список событий через пробел, при наступлении которых необходимо выполнить обработчик (handler)
// handler - функция (обработчик события)
// краткая запись функции on
.event(handler);
// event - название события (можно использовать для обработки только тех событий, для которых в jQuery создана такая краткая запись)
// использование в качестве обработчика анонимной функции
$('.btn').on('click', function() {
// действия, которые будут выполнены при наступлении события...
console.log($(this).text());
});
// использование обычной функции в качестве обработчика
var myFunction = function() {
console.log($(this).text());
}
$('.btn').on('click', myFunction);
$('.btn').click(function() {
// действия, которые будут выполнены при наступлении события...
console.log($(this).text());
});
Дополнительная информация о событии
$('#demo').on('click', function(e){
// e – объект Event, содержащий дополнительную информацию о произошедшем событии
// часто используемые свойства объекта Event
e.preventDefault(); //отменить выполнение действия по умолчанию
e.stopPropagation(); //остановить дальнейшее всплытие события
// e.type – получить тип события
// e.target – ссылка на элемент, на котором произошло событие
// e.currentTarget - ссылка на текущий элемент (для которого сработал обработчик). Это свойство, как правило, равно функции this.
// e.currentTarget === this
// e.which – код клавиши (для мыши), код кнопки или символа (для клавиатуры)
//e.pageX, e.pageY – координаты курсора, относительно левого верхнего угла документа
});
Пространство имён
// событие click в пространстве имён first
$('#demo').on('click.first',function(){
console.log('1 обработчик события click');
});
// событие click в пространстве имён second
$('#demo').on('click.second',function(){
console.log('2 обработчик события click');
});
// вызвать событие click в пространстве имён first
$('#demo').trigger('click.first');
// вызвать событие click в пространстве имён second
$('#demo').trigger('click.second');
//удалить обработчики события click в пространстве имён first
$('#demo').off('click.first');
//удалить обработчики события click в пространстве имён second
$('#demo').off('click.second');
Передача дополнительных данных в обработчик
<div id="content"></div>
<button id="showContent1">Показать контент 1</button>
<button id="showContent2">Показать контент 2</button>
...
<script>
$('#showContent1').on('click', {title:'Заголовок 1', content: 'Содержимое 1...'}, function(e){
var output = '<b>'+e.data.title+': </b>' + e.data.content;
$('#content').html(output);
});
$('#showContent2').on('click', {title:'Заголовок 2', content: 'Содержимое 2...'}, function(e){
var output = '<b>'+e.data.title+': </b>' + e.data.content;
$('#content').html(output);
});
</script>
Как повесить несколько событий на один элемент
$('#id').on('keyup keypress blur change', function(e) {
console.log(e.type); // тип события
});
// или так
var myFunction = function() {
...
}
$('#id')
.keyup(myFunction)
.keypress(myFunction)
.blur(myFunction)
.change(myFunction);
$("#id").on({
mouseenter: function() {
// обработчик события mouseenter...
},
mouseleave: function() {
// обработчик события mouseleave...
},
click: function() {
// обработчик события click...
}
});
$("#demo").click(function(){
console.log('1 обработчик события click');
});
$("#demo").click(function(){
console.log('2 обработчик события click');
});
var eventList = $._data($('#demo')[0], 'events');
console.log(eventList);
Программный вызов события
trigger- вызывает указанное событие у элемента.
triggerHandler- вызывает обработчик события, при этом само событие не происходит.
$('#header').on('click',
function() {
console('Произошёл клик на элементе #header');
}
});
// программный вызов события click элемента
$('#header').trigger('click');
// короткая запись данного вызова
$('#header').click();
// вызов обработчика события click у выбранного элемента
$('#header').triggerHandler('click');
jQuery - Событие загрузки страницы (ready)
$(function(){
// действия, которые необходимо выполнить после загрузки документа...
});
$(document).ready(function(){
// действия, которые необходимо выполнить после загрузки документа...
});
jQuery - Событие загрузки (load)
$(window).on('load', function() {
// действия после полной загрузки страницы...
});
<img id="image" src="image.png">
...
<script>
$('#image').on('load', function() {
console.log('Изображение загружено');
});
</script>
jQuery - События мыши
-
mousedown
-
mouseup
-
click
-
mousemove
-
wheel
-
hover
-
mouseenter
-
mouseover
-
mouseleave
-
mouseout
jQuery - Событие клик (click)
$(window).on('click', function(e) {
// обработка события click...
console.log('Нажата кнопка: ' + e.which); //1 - левая кнопка, 2 - средняя кнопка, 3 - правая
console.log('Координаты курсора: x = ' + e.pageX + ' ; y = ' + e.pageY);
});
$('.btn').on('click', function(){
// код обработчика события нажатия кнопки
...
});
$('.btn').click(function(){
...
});
<div class="message">
...<a class="hide-message" href="#">Скрыть блок через 5 секунд</a>...
</div>
...
<script>
$('.hide-message').click(function(e){
e.preventDefault();
var _this = this;
setTimeout(function(){
$(_this).closest('.message').hide();
}, 5000);
});
</script>
jQuery - Событие при наведении (hover)

-
вхождения (mouseenter, mouseover);
-
покидания (mouseleave, mouseout).
<ul id="list">
<li>Ручка</li>
<li>Карандаш</li>
<li>Линейка</li>
</ul>
...
<script>
$('ul>li').
mouseenter(function(){
// при вхождении в элемент
$(this).css('color','orange');
}).
mouseleave(function(){
// при покидании элемента
$(this).css('color','black');
});
</script>
$('ul>li').
mouseover(function(){
// при вхождении в элемент
$(this).css('color','orange');
}).
mouseout(function(){
// при покидании элемента
$(this).css('color','black');
});
<div id="count">Количество: <span>0</span></div>
...
<script>
$('#count').mouseenter(function(){
var count = parseInt($(this).find('span').text());
count++;
$(this).find('span').text(count);
});
</script>
$('ul>li').hover(
function(){
// при вхождении в элемент
$(this).css('color','orange');
},
function(){
// при покидании элемента
$(this).css('color','black');
}
);
$('h1').hover(function(){
console.log('Произошло события входа в элемент или выхода из него');
});
jQuery - Событие движения мыши
$('.target').mousemove(function(e) {
console.log('Вызван обработчик для события mousemove.');
console.log('Координаты относительно левого верхнего угла документа: ' + e.pageX + ', ' + e.pageY);
console.log('Координаты курсора внутри цели: ' + e.offsetX + ', ' + e.offsetY);
});
jQuery - Событие колёсика мыши (wheel)
$(window).on('wheel', function(e) {
// код обработчика (например)...
console.log('Количество прокрученных пикселей: ' + e.originalEvent.deltaY);
if (e.originalEvent.deltaY < 0){
console.log('Прокручиваем вверх');
} else {
console.log('Прокручиваем вниз');
}
});
jQuery – События клавиатуры
keydown -> keypress -> keyup
keydown(клавиша нажата, но ещё не отпущена);
keypress(событие генерируется для букв, цифр и других клавиш, за исключением управляющих) – предназначено для того чтобы получить код символа (события keydownи keyupпозволяют узнать только о коде клавиши, но не символа);
keyup(генерируется браузером при отпускании клавиши).
Например, напишем обработчик для прослушивания всех событий, которые происходят при нажатии клавиши:
<input id="target" type="text" value="">
...
<script>
$('#target').on('keydown keypress keyup', function(e) {
console.log('Тип события: ' + e.type); // keydown, keypress, keyup
console.log('Код нажатой клавиши или символа: ' + e.which); // код символа позволяет получить только keypress
console.log('Нажата клавиша Alt: ' + e.altKey);
console.log('Нажата клавиша Ctrl: ' + e.ctrlKey);
console.log('Нажата клавиша Shift: ' + e.shiftKey);
console.log('Нажата клавиша Cmd (osMac): ' + e.metaKey);
});
</script>
$(document).keypress("c",
function(e) {
if(e.ctrlKey) {
console.log('Нажато сочетание клавиш Ctrl+c');
}
});
$(document).keydown(function(e) {
// с поддержкой macOS X
if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
// ваши действия...
}
}
<input id="name" type="text">
...
<script>
$('#name').
keydown(function(){
$(this).css('background-color', 'yellow');
}).
keyup(function(){
$(this).css('background-color, 'pink');
});
</script>
jQuery – События элементов формы
-
focus (focusin)
-
blur (focusout)
-
change
-
input (для текстовых элементов формы)
-
select
-
submit
jQuery - События получения и потери фокуса
<div id="demo"><input type="text"></div>
...
<script>
$('#demo').
focusin(function(){
$(this).css('background-color','orange');
})
.focusout(function(){
$(this).css('background-color','inherit');
});
</script>
$('#demo input').
focus(function(){
$(this).parent().css('background-color','orange');
})
.blur(function(){
$(this).parent().css('background-color','inherit');
});
jQuery - Событие изменения (change)
<input type="checkbox" id="agree">
<button type="submit" id="send" disabled>Отправить</button>
...
<script>
$(function() {
$('#agree').on('change', function(){
if (this.checked) {
$('#send').prop('disabled',false);
} else {
$('#send').prop('disabled',true);
}
});
});
</script>
<p id="result"></p>
<select id="list">
<option value="1">Первое значение</option>
<option value="2">Второе значение</option>
<option value="3">Третье значение</option>
</select>
...
<script>
$(function() {
$('#list').on('change', function(){
var value = $(this).val();
$('#result').text(value);
});
});
</script>
<select name="colors" multiple="multiple">
<option>Зелёный</option>
<option>Красный</option>
<option>Синий</option>
<option>Коричневый</option>
<option>Фиолетовый</option>
<option>Серый</option>
</select>
...
<script>
$('select[name="colors"]')
.change(function () {
var colors = [];
$('select[name="colors"] option:selected').each(function() {
colors.push($(this).text());
});
console.log('Выбранные цвета: ' + colors.join());
})
.change();
</script>
// list - id элемента change
$('#list').trigger('change');
// краткая запись
$('#list').change();
// вызов только обработчика события change
$('#list').triggerHandler('change');
<input type="text" name="name">
...
<script>
$(function() {
// событие изменения значения input (возникает только после потери фокуса)
$('input[name="name"]').on('change',
function(){
var value = $(this).val();
console.log(value);
});
});
</script>
$('input[name="name"]').on('input',function(){
var value = $(this).val();
console.log(value);
});
<textarea name="text"></textarea>
...
<script>
$('textarea[name="text"]').on('input',function(){
var value = $(this).val();
console.log(value);
});
</script>
<input type="radio" name="platform" checked="checked" value="windows">Windows
<input type="radio" name="platform" value="linux">Linux
<input type="radio" name="platform" value="macos">macOS
...
<script>
$(function() {
$('input[name="platform"]').on('change', function(){
var value = $(this).val();
console.log(value);
});
});
</script>
jQuery - Событие выбора (select)
$( "#target" ).select(function() {
console.log('Вызван обработчик события select');
});
jQuery – Событие отправки формы (submit)
<form id="feedback" action="action.php">
...
</form>
...
<script>
$('#feedback').submit(function(e) {
// отменить отправку формы
e.preventDefault();
// другие действия, например, для отправки формы по ajax...
});
</script>
$('#feedback').submit();
$('#feedback').trigger('submit');
jQuery - Событие прокрутки (scroll)
// краткая запись функции
$(window).scroll(function() {
// действия при скроллинге страницы...
if ($(this).scrollTop()>200) {
$('.scrollup').fadeIn();
} else {
$('.scrollup').fadeOut();
}
});
jQuery - Событие изменения размеров окна (resize)
$(window).resize(function() {
$('body').append('<p>Ширина x Высота = ' + window.innerWidth + ' x ' + window.innerHeight + '</p>');
});
jQuery - Отмена стандартного поведения события
$('a.service').on('click',function(e){
//отменяем стандартное действие браузера
e.preventDefault();
// действия, которые будет выполнять ссылка
...
});
Что такое всплытие и как его остановить

<div class="mark">Некоторый текст...<span class="mark">фрагмент...</span>...продолжение...</div>
...
<script>
$('.mark').on('hover',
function(e){
e.stopPropagation();
$(this).css('color',orange);
},
function(e){
e.stopPropagation();
$(this).css('color',black);
}
});
</script>
$('a').on('click', function(e){
//e.preventDefault();
//e.stopPropagation();
...
return false;
});
Добавление событий к динамически созданным объектам
$(document).on(eventName, selector, handler);
// document или любой другой существующий родительский элемент
// eventName - имя события
// selector - селектор, осуществляющий фильтрацию потомков, для которых необходимо запустить обработчик события
// handler - обработчик события
<button id="addButton" type="button">Добавить кнопку</button>
<script>
// при нажатии на элемент с id="addButton" добавить в начало страницы новую кнопку
$('#addButton').on('click', function(e) {
$('body').prepend('<button class="deleteMe" type="button">Удалить меня</button>');
});
// добавить событие click, которое будет выполнено для элементов, которых ещё нет на странице
$(document).on('click','.deleteMe', function() {
$(this).remove();
});
</script>
$(document).on('click','#comment a',function(e) {
if(!(location.hostname === this.hostname || !this.hostname.length)) {
e.preventDefault();
location.href='away?link='+encodeURIComponent($(this).attr('href'));
}
});
jQuery - Удалить обработчик события
$('.link').off();$('.link').off('link');$('.link').off('click','**');// добавление делегированного события
$('ul').on('click','li', function(){
// выводим в консоль контент элемента li
console.log($(this).text());
});
// удаление делегированного события
$('ul').off('click','li');
$('body').on('click.modal', '.show', openModal);Создание пользовательского события
<div class="module">
<p>...</p>
<button class="success" type="button">Вызвать пользовательское событие highlight (цвет зелёный)</button>
<button class="error" type="button">Вызвать пользовательское событие highlight (цвет красный)</button>
</div>
...
<script>
// добавляем ко всем элементам p пользовательское событие, которое будет изменять цвет текста и его содержимое
// получения данных, переданных методом trigger, осуществим посредством аргументов color и title
$('.module p').on('highlight', function(e, color, title) {
$(this).css('color',color);
$(this).text('Вызвано пользовательское событие highlight ' +title);
});
// при нажатии на элемент с классом success вызвать кастомное событие highlight и передать ему параметры
$('.success').click(function(){
// используя второй аргумент передадим данные в обработчик события
$(this).closest('.module').find('p').trigger('highlight',['green','(цвет зелёный)']);
});
// при нажатии на элемент с классом error вызвать кастомное событие highlight и передать ему параметры
$('.error').click(function(){
// используя второй аргумент передадим данные в обработчик события
$(this).closest('.module').find('p').trigger('highlight',['red','(цвет красный)']);
});
</script>
Создаем iframe с видео
<div class="modal fade" id="myModalVideo" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header"><button class="close" type="button" data-dismiss="modal">x</button>
</div>
<div class="modal-body">
<object width="1" height="1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data="" type="application/x-shockwave-flash"><param name="src" value="/video/Egeria.mp4" /><embed width="1" height="1" type="application/x-shockwave-flash" src="/video/Egeria.mp4" /></object>
</div>
</div>
</div>
</div>
<button type="button" id="toggleModalVideoYoutube" data-bs-toggle="modal" data-bs-target="#myModalVideo">
Запустить модальное окно
</button>