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

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

Chrome尝试加载页面上的脚本文件时收到主题错误。 它说这是在JavaScript文件的最后一行。 我似乎无法find任何问题。 在Firefox中没有错误,脚本按预期工作。 只需使用表单validation

// 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; }​ 

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

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

编辑 – 我认为这是一个零宽度的空间,Unicode 200B。 似乎很奇怪,我不能肯定,它不是一个Stackoverflow神器,但是当我复制/粘贴最后一个function,包括完整的最后一行到Chrome控制台,我得到你的错误。

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

如果您怀疑自己有这种病,而且您使用的是MacOS或Linux / Unix,那么od命令行工具可以向您显示源代码中字符的数字值(虽然相当难看)文件。 一些IDE和编辑也可以显示“有趣”的字符。 请注意,这些字符并不总是一个问题。 例如,在大多数合理的编程语言中,这是完全可以的,因为在string常量中需要embeddedUnicode字符。 当语言parsing器遇到不希望它们的字符时,问题就开始发生了。

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

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

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

通常不明白为什么这是一个问题在Chrome浏览器中,直到我遇到了一个声明,它表示,目前版本的Chrome浏览器的JavaScript引擎不支持多行string包装在单引号,并有新的行( \n )字符在他们中。 为了使它工作,多行string需要用双引号括起来。 改变我的代码,解决了这个问题。

我将尝试find一个标准或Chrome文档,这certificate了这一点的参考。 在此之前,尝试这个解决scheme,看看是否适合你。

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

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