Chrome 未捕获的语法错误:意外的令牌非法

2022-08-30 04:12:05

当 Chrome 尝试在网页上加载脚本文件时收到主题错误。它说它位于javascript文件的最后一行。我似乎找不到任何错误。firefox 中没有错误,脚本按预期工作。仅使用表单验证

// JavaScript Document
$(function() {
  $('#wm-form').submit(function() {
    var errors = false;
    var errorMsg = "";
    $('.required').each(function() {
      if(!validField($(this))) {
        errorMsg += $(this).attr('name').capitalize() + " cannot be blank\n";
        errors = true;
      }
    });
    var emailAddress = $('#email');
    if(isValid(emailAddress) && !(/^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$/.test(emailAddress.val()))) {
      errorMsg += "Not a valid email address. Please enter in a correctly formatted email address";
      errors = true;
    }
    if(errors) {
      alert(errorMsg);
      return false;
    }
  });

  $('.form-focus').click(function() {
    $(document).scrollTop(0);
    $('#first_name').focus();
    return false;
  });
});

function validField(element) {
  if(!isValid(element.val()) || (element.attr('placeholder') && element.attr('placeholder') == element.val()) || 
    (element.attr('type') == 'radio' && !checkedRadio(element))) {
    return false;
  }
  else {
    return true;
  }
}

function isValid(ele) {
  if(ele == null || ele == '') {
    return false;
  }
  else {
    return true;
  }
}

String.prototype.capitalize = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
};

function checkedRadio (element) {
  var valid = false;
  $('input[name="'+ element.attr("name") +'"]:checked').each(function() {
    valid = true;
  });

  return valid;
}​

答案 1

在那个来源的末尾有某种虚假的字符。请尝试删除最后一行并将其添加回去。

我无法弄清楚那里到底有什么,但是...

编辑 - 我认为这是一个零宽度的空间,Unicode 200B。看起来很奇怪,我当然不能确定它不是Stackoverflow工件,但是当我将最后一个功能(包括完整的最后一行)复制/粘贴到Chrome控制台中时,我得到了你的错误。

这些字符的一个臭名昭着的来源是像jsfiddle这样的网站。我并不是说它们有什么问题 - 这只是某些事情的副作用,也许是使用内容可编辑的输入小部件。

如果您怀疑自己患有这种疾病,并且您使用的是MacOS或Linux / Unix,命令行工具可以向您显示(尽管以相当丑陋的方式)源代码文件字符中的数值。一些IDE和编辑器也可以显示“有趣”的角色。请注意,此类字符并不总是问题。例如,在字符串常量中嵌入Unicode字符是完全可以的(无论如何,在大多数合理的编程语言中)。当语言解析器遇到字符时,问题开始发生,而它不需要它们。od


答案 2

在粘贴从jsfiddle复制的代码后,我在Chrome中收到相同的错误。

如果从 jsfiddle 中的面板中选择所有代码并将其粘贴到自由文本编辑器 Notepad++ 中,则应该能够在代码的最末尾看到问题字符作为问号“?”。删除此问号,然后从Notepad ++复制并粘贴代码,问题将消失。