Ситуация: вы пишете скрипт, в котором объявляете новые функции или используете уже встроенные. Вы уверены, что всё правильно, потому что делали так сотни раз в других проектах, но при запуске кода появляется такая ошибка:
❌ Uncaught SyntaxError: Unexpected end of input
Что это значит: браузер ждёт от вас или от кода продолжения ввода параметров или новых значений, но не находит их и падает с ошибкой.
Когда встречается: чаще всего это значит, что вы где-то потеряли закрывающие скобки. Вторая ситуация, более редкая — вы обрабатываете JSON-запрос и вам просто не приходят нужные данные (хотя должны бы). О том, что такое JSON-запросы и ответы, будет в отдельной статье — тема слишком большая и интересная для короткого ответа. Сейчас остановимся на первом варианте.
Что делать с ошибкой Uncaught SyntaxError: Unexpected end of input
Чтобы отловить и исправить эту ошибку, вам нужно посчитать и сравнить количество открытых и закрытых скобок в программе — как круглых (), так и фигурных {}. Скорее всего, вам не хватает и того, и другого (и точки с запятой после них).
Проще всего такую ошибку найти простым форматированием кода: когда все вложенные команды и параметры сдвигаются вправо табуляцией или пробелами. В этом случае легко найти разрыв в получившейся лесенке кода и добавить туда нужные скобки. Смотрите сами:
$(function () {
$("#mewlyDiagnosed").hover(function () {
$("#mewlyDiagnosed").animate({ 'height': '237px', 'top': "-75px" });
}, function () {
$("#mewlyDiagnosed").animate({ 'height': '162px', 'top': "0px" });
});
Может показаться, что всё в порядке, но вот как выглядит этот код после форматирования:
$(function () {
$("#mewlyDiagnosed").hover(function () {
$("#mewlyDiagnosed").animate({ 'height': '237px', 'top': "-75px" });
}, function () {
$("#mewlyDiagnosed").animate({ 'height': '162px', 'top': "0px" });
});
Сразу видно, что в конце скрипта не хватает строки с )};
— если их не поставить, браузер будет ждать продолжения ввода параметров вызова функции, не дождётся их и выдаст ошибку Uncaught SyntaxError: Unexpected end of input
Попробуйте сами. Найдите ошибку в этом коде:
$(function() {
// Script to select all checkboxes
$state.on('change', function(ev) {
var $chcks = $("#example tbody input[type='checkbox']");
if($state.is(':checked')) {
$chcks.prop('checked', true).trigger('change');
}else {
$chcks.prop('checked', false).trigger('change');
});
});