2009-09-27 6 views
5

¿Hay alguna forma de corregir el error que provoca JavaScript & en la validación de w3? El problema es que tengo que usar & & en una instrucción if y estos dos & & causan errores en la validación w3.Javascript: ¿Cómo se corrige el error de validación de W3 causado por &

EDIT: Mismo problema con "<" y ">".

+2

Sería mejor si mostrara algún código. – LiraNuna

+0

¿Qué versión HTML usas? – Gumbo

+0

Por cierto: un AND lógico siempre puede representarse mediante un OR lógico y NO: A && B =! (! A ||! B) – Gumbo

Respuesta

18

Hay algunas cosas que puede hacer.

puede encerrarlo dentro de los comentarios HTML:

<script type="text/javascript"> 
<!-- 

if (foo && bar) ... 

//--> 
</script> 

puede encerrarlo en una sección CDATA:

<script type="text/javascript"> 
// <![CDATA[ 

if (foo && bar) ... 

// ]]> 
</script> 

se pueden incluir en un archivo en su lugar:

<script src="foobar.js" type="text/javascript"></script> 
+2

+1 a usar un archivo JavaScript. Las otras dos opciones son un poco anticuadas, use un DOCTYPE moderno en su lugar. –

+0

Asegúrese de comentar el inicio del comentario HTML. Si E4X está habilitado ('tipo' contiene'; e4x = 1'), el código dentro sería un comentario literal. –

+0

@TJ He encontrado algunos .js se bloqueará si no está en línea .. (es decir, googlemap v3) –

3

La respuesta principal es: use archivos JavaScript para JavaScript, no archivos HTML, y use el src en tributo de etiquetas de script. (Combine todos sus JS en un archivo, minimice, gzip, etc. para obtener rendimiento).

Pero, usted puede incrustar JavaScript en HTML si es absolutamente necesario. Use un DOCTYPE válido y moderno y no tiene que recurrir a etiquetas de comentarios y secciones CDATA.

Válido ejemplo HTML5:

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 
<title>Example</title> 
<script type='text/javascript'> 
function foo() { 
    var a = 1, b = 2; 

    if (a && b) { 
     alert("Both"); 
    } 
    if (a < b) { 
     alert("a < b"); 
    } 
    if (a > b) { 
     alert("a > b"); 
    } 
} 
</script> 
</head> 
<body> 
<p>Hi there</p> 
</body> 
</html> 

Eso también validará como HTML 4 estricto si se cambia el tipo de documento a

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 

Nótese que en ambos casos, es necesario tener cuidado con las etiquetas de final en la secuencia de comandos -

Esto causa el problema:

<script type='text/javascript'> 
alert("</td>"); 
</script> 

Esto resuelve el problema al prologar la barra con una barra invertida (o se puede romper la etiqueta de cierre para arriba en los literales de cadena separadas):

<script type='text/javascript'> 
alert("<\/td>"); 
// -or- 
alert("<" + "/td>"); 
</script> 

Pero, de nuevo, la respuesta básica es: No incrustar dentro de JavaScript Archivos HTML cuando puede evitarlo, use archivos JavaScript para eso.

+0

-1 sin explicación o comentario? Bonito. –

+0

Esa es la respuesta correcta. +1 –

-1

escape & con &amp;, < con &lt;, y > con &gt;.

+0

Esto funciona muy bien en XHTML ... pero no HTML compatible con XHTML donde simplemente se romperá. – Quentin

+0

David, ¿lo has probado en HTML? Funciona bien en HTML. –

+0

No necesito probar esta cosa trivial. Es una parte muy básica de las diferencias entre HTML y XHTML. Dicho esto, he aquí un caso de prueba: http://dorward.me.uk/tmp/no-it-doesnt-work.html (se produce un error, como se esperaba, en Firefox. No puedo molestarme en probarlo en otro navegadores). – Quentin

0

Según su descripción, sospecho que está hablando de secuencias de comandos que están dentro de una propiedad de evento en una etiqueta HTML (como onclick). En ese caso, el código del script debe estar codificado en HTML. Elijah golpeó el clavo en la cabeza allí.

Por ejemplo:

<input type="submit" onclick="if(somevar &amp;&amp; othervar) callFunc(&quot;clicked&quot;);"> 

No es necesario hacer eso dentro de un bloque <script></script>.

+0

hmm ... Empujado hacia abajo, no estoy seguro de por qué. Quienquiera que haya querido leer el estándar, definitivamente se aplica tanto a HTML como a XHTML. Lo mismo se aplica a las URL en las etiquetas de anclaje, etc. también. –

Cuestiones relacionadas