Error de sintaxis no detectado de Chrome: token inesperado ILEGAL [duplicado]
Recibir el error de asunto cuando Chrome intenta cargar el archivo de secuencia de comandos en la página. Dice que está en la última línea del archivo javascript. Parece que no puedo encontrar nada malo en ello. No hay errores en Firefox y el script funciona como se esperaba. Solo usando la validación de formulario
// 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;
}
Hay una especie de carácter falso al final de esa fuente. Intente eliminar la última línea y volver a agregarla.
No puedo entender exactamente qué hay allí, todavía...
editar : creo que es un espacio de ancho cero, Unicode 200B. Parece bastante extraño y, por supuesto, no puedo estar seguro de que no sea un artefacto de Stackoverflow, pero cuando copio/pego esa última función, incluida la última línea completa, en la consola de Chrome, aparece el error.
Una fuente notoria de este tipo de caracteres son sitios web como jsfiddle . No estoy diciendo que haya algo malo en ellos; es solo un efecto secundario de algo, tal vez el uso de widgets de entrada de contenido editables.
Si sospechas que tienes un caso de esta dolencia y estás en MacOS o Linux/Unix, la od
herramienta de línea de comandos puede mostrarte (aunque de una manera bastante fea) los valores numéricos en los caracteres del archivo de código fuente. . Algunos IDE y editores también pueden mostrar personajes "divertidos". Tenga en cuenta que estos personajes no siempre son un problema. Está perfectamente bien (al menos en la mayoría de los lenguajes de programación razonables) que haya caracteres Unicode incrustados en constantes de cadena, por ejemplo. Los problemas comienzan a ocurrir cuando el analizador de lenguaje encuentra caracteres cuando no los esperaba.
Recibo el mismo error en Chrome después de pegar el código copiado de jsfiddle.
Si selecciona todo el código de un panel en jsfiddle y lo pega en el editor de texto gratuito Notepad++, debería poder ver el carácter problemático como un signo de interrogación "?" al final de su código. Elimine este signo de interrogación, luego copie y pegue el código de Notepad++ y el problema desaparecerá.
Tuve el mismo error cuando una cadena de varias líneas incluía \n
caracteres de nueva línea (). Fusionar todas las líneas en una (eliminando así todos los caracteres de nueva línea) y enviarlo a un navegador utilizado para resolver. Pero era muy incómodo codificar.
A menudo no podía entender por qué esto era un problema en Chrome hasta que me encontré con una declaración que decía que la versión actual del motor JavaScript en Chrome no admite cadenas de varias líneas que están entre comillas simples y tienen \n
caracteres de nueva línea ( ). . Para que funcione, la cadena de varias líneas debe estar entre comillas dobles. Cambiar mi código a esto resolvió este problema.
Intentaré encontrar una referencia a un documento estándar o de Chrome que lo demuestre. Hasta entonces, prueba esta solución y comprueba si también funciona para ti.