2009-07-04 15 views
54

El siguiente bloque de código simple se puede publicar en una página HTML estática pero da como resultado un error de JavaScript. ¿Cómo se debe evitar la comilla doble incrustada en el controlador onClick (es decir, \ "xyz)? Tenga en cuenta que el HTML se genera dinámicamente extrayendo datos de una base de datos, cuyos datos son fragmentos de otro código HTML que podría tener uno o dos comillas. parece que la adición de una sola barra invertida delante del carácter de comillas dobles no hace el truco.Escape de comillas dobles en JavaScript controlador de eventos onClick

<script type="text/javascript"> 
    function parse(a, b, c) { 
     alert(c); 
    } 
</script> 

<a href="#x" onclick="parse('#', false, '<a href=\"xyz'); return false">Test</a> 

Respuesta

71

¿Usted intentó

&quot; o \x22

en lugar de

\" 

?

+6

Acabo de probar esto en FF3.6 e IE8 en un escenario similar y no funcionó. Sin embargo, reemplazó el "con ". También probé el código exacto anterior y funcionó de ambas maneras. En resumen, el \ x22 no parece funcionar en todos los escenarios y debería intentar " en ese caso. – SpliFF

+3

Bueno. " parece funcionar en atributos de etiqueta html en Webkit y Firefox y Opera. – NoBugs

+0

\ x22 es el único que funcionó para mí – Ruwantha

0

Creo que el mejor enfoque consiste en asignar el manejador onclick unobtrusively.

Algo como esto :

window.onload = function(){ 
    var myLink = document.getElementsById('myLinkId'); 
    myLink.onclick = function(){ 
     parse('#', false, '<a href="xyz'); 
     return false; 
    } 
} 

//... 


<a href="#" id="myLink">Test</a> 
4

Es posible que también desee probar dos barras diagonales inversas (\\") para escapar del carácter de escape.

+1

Clásico. Stackoverflow se comió una de tus barras invertidas y solo mostró la otra. Lo arreglé por ti. – Nosredna

+1

Vaya, gracias. Me pregunto si eso le pasó al OP. –

5

Aunque estoy de acuerdo con la CMS en hacer esto de una manera discreta (a través de un lib como jQuery o Dojo), esto es lo que también funcionan:

<script type="text/javascript"> 
function parse(a, b, c) { 
    alert(c); 
    } 

</script> 

<a href="#x" onclick="parse('#', false, 'xyc&quot;foo');return false;">Test</a> 

La razón de que barfs no es causa de JavaScript, es porque del analizador de HTML. No tiene ningún concepto de las comillas escapadas que se desplazan a lo largo de la búsqueda de la cotización final y la encuentra y la devuelve como la función onclick. Esto es javascript no válido, por lo que no encontrará el error hasta que JavaScript intente ejecutar la función ...

+2

Votación a la baja. ¡NO necesitas un marco para algo como esto! –

+0

+1 para " ... – Greg

50

Necesita ser HTML-escapado, no JavaScript-escapado. Cambie \" a &quot;

Cuestiones relacionadas