Статья

jQuery: ошибки новичков и как их избежать ⚠️

jQuery — классная библиотека, которая упрощает работу с JavaScript, но у новичков часто возникают ошибки. Иногда они кажутся мелочью, но могут испортить весь сайт. Давай разберём самые частые и как их исправлять.


1. Забытие подключения jQuery

Очень частая ошибка — забыть подключить сам jQuery или подключить его после скрипта, который его использует:

<script src="myscript.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

Результат: Uncaught ReferenceError: $ is not defined

✅ Решение: подключай сначала jQuery, потом свои скрипты:

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="myscript.js"></script>

2. Код выполняется до загрузки DOM

Новички иногда пишут скрипт, а элементы ещё не загружены. Например:

$('#myBtn').click(function() {
  alert('Клик!');
});

Если <button id="myBtn"> ещё не существует, скрипт не сработает.

✅ Решение — использовать $(document).ready():

$(function() { // сокращённо от $(document).ready
  $('#myBtn').click(function() {
    alert('Клик!');
  });
});

Теперь код ждёт загрузки DOM и работает корректно.


3. Повторное подключение jQuery

Если jQuery подключён дважды, часто появляются конфликты версий или $ перестаёт работать.

✅ Решение: всегда проверяй, что библиотека подключена один раз:

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

И никаких других <script> с jQuery не должно быть.


4. Использование устаревших методов

Некоторые методы jQuery устарели:

  • .bind(), .unbind() → заменяем на .on() и .off()

  • .live() → давно удалён, использовать только .on()

Пример:

// плохо
$('#btn').bind('click', function() { alert('Click'); });

// правильно
$('#btn').on('click', function() { alert('Click'); });

5. Неправильный выбор элементов

Новички иногда используют $('.class') вместо $('#id'), или наоборот, и получают несколько элементов, хотя нужен один.

✅ Решение:

  • Используй #id для уникального элемента.

  • Используй .class для коллекции элементов.

  • Проверяй длину выборки:

console.log($('#myBtn').length); // должно быть 1

6. Забывание цепочек и методов

jQuery позволяет цепочки:

$('#box').fadeOut(500).fadeIn(500);

Ошибка новичков — дублировать код вместо цепочки:

$('#box').fadeOut(500);
$('#box').fadeIn(500); // можно было одной цепочкой

Цепочка сокращает код и предотвращает ошибки с селекторами.


7. Смешивание jQuery и чистого JS без смысла

Например:

document.getElementById('btn').addEventListener('click', function() {
  $('#box').fadeOut();
});

✅ Решение: выбирай один подход. Если используешь jQuery — используй его полностью:

$('#btn').click(function() {
  $('#box').fadeOut();
});

8. Перезапись событий

Новички иногда делают так:

$('#btn').click(function() { alert('Первый'); });
$('#btn').click(function() { alert('Второй'); });

Результат: оба события выполняются, а иногда хотят только одно.

✅ Решение:

  • использовать .off() перед .on(), если нужно заменить событие:
$('#btn').off('click').on('click', function() {
  alert('Только одно событие');
});

9. Анимации и производительность

Многие используют .animate() на большом количестве элементов или каждый кадр, что тормозит браузер.

✅ Решение:

  • ограничивай количество анимируемых элементов.

  • Используй CSS-переходы там, где это возможно (transition).

  • Добавляй .stop() перед новой анимацией, чтобы не накапливать очередь:

$('#box').stop().animate({left: '200px'}, 400);

10. Отсутствие проверки существования элементов

$('#notExist').fadeOut();

Если элемента нет, jQuery молча ничего не делает, но иногда логика ломается.

✅ Решение: проверяй перед действием:

if ($('#notExist').length) {
  $('#notExist').fadeOut();
}

11. Игнорирование версий jQuery

Некоторые плагины требуют определённой версии. Новички подключают последнюю jQuery, и плагин не работает.

✅ Решение: всегда проверяй требования плагинов и документацию.


12. Использование глобального $ в конфликтах

Если на странице есть другие библиотеки, $ может конфликтовать.

✅ Решение: использовать jQuery вместо $:

jQuery(document).ready(function($){
  $('#btn').click(function(){
    alert('Click!');
  });
});

Здесь $ безопасно используется внутри функции, глобально конфликтов нет.


13. Забывание делегирования событий

Если элементы создаются динамически, $('#btn').click() работать не будет.

✅ Решение: использовать делегирование:

$(document).on('click', '#btn', function() {
  alert('Динамический элемент');
});

14. Перегрузка DOM

Новички иногда каждый клик создают новый элемент без удаления старого:

$('#btn').click(function() {
  $('body').append('<div class="box"></div>');
});

Через пару кликов браузер начинает тормозить.

✅ Решение: проверять количество элементов и очищать ненужные:

$('#btn').click(function() {
  if ($('.box').length === 0) {
    $('body').append('<div class="box"></div>');
  }
});

15. Забывание .preventDefault()

Для ссылок и форм:

$('a').click(function(e) {
  alert('Клик!');
});

Если не добавить e.preventDefault(), страница будет перезагружаться при клике на <a href="#">.

✅ Правильно:

$('a').click(function(e) {
  e.preventDefault();
  alert('Клик!');
});

16. Переменные вне области видимости

Новички часто объявляют переменные без let или const, и они становятся глобальными.

index = 0; // ❌

✅ Решение:

let index = 0; // ✅

17. Неоптимальное использование селекторов

Каждый раз писать $('#box') внутри цикла — плохо.

✅ Решение: сохраняй селектор в переменную:

const $box = $('#box');
$box.fadeOut();
$box.fadeIn();

Это быстрее и аккуратнее.


18. Ошибки с this

Внутри обработчика this — DOM-элемент, а не jQuery-объект.

$(this).fadeOut(); // правильно
this.fadeOut();    // ❌

19. Отсутствие комментариев

Когда скрипт сложный, новичок часто не комментирует код.

Через месяц сам забудет, что делает $slides.animate({left: '-=100px'}).

✅ Решение: комментируй блоки:

// Сдвигаем слайд на 100px влево
$slides.animate({left: '-=100px'}, 400);

20. Заключение

Ошибки новичков — это нормально. Важно их видеть и исправлять.

Основные советы:

  • Подключай jQuery правильно и один раз.

  • Жди загрузки DOM с $(function(){}).

  • Используй .on() для событий, особенно динамических элементов.

  • Проверяй наличие элементов перед действиями.

  • Оптимизируй селекторы и анимации.

  • Не смешивай jQuery и чистый JS без причины.

  • Комментируй код и следи за версией библиотеки.

Если придерживаться этих правил, работать с jQuery станет просто и приятно, а сайт будет работать корректно без багов.

Для ответа вы можете авторизоваться