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

IT技术 javascript jquery google-chrome
2021-01-13 10:08:59

当 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;
}​
4个回答

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

我无法确切地弄清楚那里有什么,但......

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

此类字符的臭名昭著的来源是jsfiddle之类的网站我并不是说它们有什么问题——这只是某些东西的副作用,也许是使用了内容可编辑的输入小部件。

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

哇,感谢您为此发布解决方案。起初我不相信我的代码因为复制/粘贴而无法工作,但我想我会尝试一下,这修复了它。
2021-03-22 10:08:59
这通常是发生在我身上的事情,我在使用 jsfiddle 创建脚本,然后将其复制并粘贴到文本编辑器并尝试在浏览器中运行时了解到。这是一个隐藏的字符,我相信在 Mac 上显示为一个项目符号点。
2021-03-23 10:08:59
从 pdf 文件复制和粘贴会出现此错误。我的是使用这个引号--->“ ”而不是“ ”。
2021-03-27 10:08:59
+1 谢谢尖尖的。从 jsFiddle 剪切和粘贴给了我这个角色。
2021-03-31 10:08:59
unicode 字符 LINE SEPARATOR 值 2028 也有同样的问题。我使用了rishida.net/tools/conversion的在线工具来找出我的字符串中可能存在的隐藏 unicode 字符。
2021-04-10 10:08:59

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

如果您从 jsfiddle 的面板中选择所有代码并将其粘贴到自由文本编辑器 Notepad++ 中,您应该能够将问题字符视为问号“?” 在代码的最后。删除这个问号,然后从Notepad++复制粘贴代码,问题就解决了。

当多行字符串包含新行 ( \n) 字符时,我遇到了同样的错误将所有行合并为一个(从而删除所有新行字符)并将其发送到用于解决的浏览器。但是编码非常不方便。

通常无法理解为什么这是 Chrome 中的一个问题,直到我遇到一个声明,该声明说 Chrome 中当前版本的 JavaScript 引擎不支持用单引号括起来并\n在其中包含换行 ( ) 字符的多行字符串. 为了使其工作,多行字符串需要用双引号括起来。将我的代码更改为此,解决了这个问题。

我将尝试找到可以证明这一点的标准或 Chrome 文档的参考。在此之前,请尝试此解决方案,看看是否也适合您。

反引号,即模板文字,是最近在 ECMAScript 6 中引入的。在撰写本文时(2012 年),还没有反引号。但是,现在,是的,如果浏览器确实支持,它们应该可以工作。这意味着,反引号不能跨浏览器兼容,这意味着仍然存在风险。许多用户仍在使用旧的桌面和移动浏览器。我建议继续使用双引号。
2021-03-18 10:08:59
用反引号分隔的字符串呢?
2021-04-05 10:08:59

我在 Chrome 中遇到了同样的错误。Chrome 控制台告诉我错误在 HTML 文件的第一行。

它实际上在 .js 文件中。所以要注意setValidNou(1060, $(this).val(), 0') 错误类型。