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

当 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;
}​
448029 次浏览

消息来源的末尾有一些虚假的人物。尝试删除最后一行并将其添加回来。

我不知道那里到底有什么,但是..。

我认为这是一个零宽空格,Unicode 200B。看起来很奇怪,我不能肯定它不是一个 Stackoverflow 工件,但当我复制/粘贴最后一个函数,包括完整的最后一行到 Chrome 控制台,我得到你的错误。

这类角色的一个臭名昭著的来源是像 Jsfiddle这样的网站。我并不是说它们有什么问题,这只是某些东西的副作用,也许是使用内容可编辑的输入小部件。

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

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

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

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

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

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

我一直不明白为什么 Chrome 中会出现这样的问题,直到我看到一份声明,声明说 Chrome 中的 JavaScript 引擎当前版本不支持多行字符串,这些字符串包含在单引号中,并且有新的行(\n)字符。为了使它工作,多行字符串需要用双引号包装。把我的代码改成这样,解决了这个问题。

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