Uncaught SyntaxError: Unexpected end of input — что это значит?

Ситу­а­ция: вы пише­те скрипт, в кото­ром объ­яв­ля­е­те новые функ­ции или исполь­зу­е­те уже встро­ен­ные. Вы уве­ре­ны, что всё пра­виль­но, пото­му что дела­ли так сот­ни раз в дру­гих про­ек­тах, но при запус­ке кода появ­ля­ет­ся такая ошиб­ка:

❌ 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');   }); });