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

可能重复:
SyntaxError:意外的标记ILLEGAL

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 blankn";
        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;
}​

该源代码的末尾有一些虚假的字符。 尝试删除最后一行并将其添加回去。

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

编辑 - 我认为这是一个零宽度的空间,Unicode 200B。 看起来很奇怪,我不能确定它不是一个Stackoverflow神器,但是当我将包括完整最后一行在内的最后一个功能复制/粘贴到Chrome控制台时,我收到了错误信息。

这种人物的臭名昭着的来源是像jsfiddle这样的网站。 我并不是说他们有任何问题 - 这只是某种东西的副作用,也许是使用内容可编辑的输入小部件。

如果您怀疑自己有这种病的情况,并且您使用的是MacOS或Linux / Unix,则od命令行工具可以向您显示源代码中字符的数字值(虽然方式相当难看)文件。 一些IDE和编辑也可以显示“有趣”的字符。 请注意,这些字符并不总是一个问题。 例如,在大多数合理的编程语言中,完全可以使用字符串常量来嵌入Unicode字符。 当语言解析器遇到不期望它们的字符时,问题就开始发生。


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

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


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

通常无法理解为什么这是Chrome的一个问题,直到我发现一个声明,它表示Chrome中当前版本的JavaScript引擎不支持用单引号括起来的多行字符串,并且有新行( n )字符在他们中。 为了使它工作,多行字符串需要用双引号括起来。 改变我的代码,解决了这个问题。

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

链接地址: http://www.djcxy.com/p/45939.html

上一篇: Chrome Uncaught Syntax Error: Unexpected Token ILLEGAL

下一篇: JavaScript error (Uncaught SyntaxError: Unexpected end of input)