2012-01-17 13 views
6

estoy tratando de crear un enlace activo en javascript¿Estoy escapando las cadenas incorrectamente en JavaScript?

var content = '<a href=\"#\" onclick=\"displayContent(\"TEST\")\">Whatever</a>'; 

$("#placeHolder").html(content); 

pero aparece un error

Uncaught SyntaxError: Unexpected token }

¿No es la forma correcta de escapar comillas dobles y crear un enlace?

+1

hay código que falta aquí. No hay} caracteres en el ejemplo de código que ha proporcionado. – ceejayoz

+0

Parece que la causa está fuera del alcance de este fragmento. – Dykam

+0

Está escapando las comillas dobles correctamente al menos –

Respuesta

7

sólo tendrá que escapar de las comillas simples

var content = '<a href="#" onclick="displayContent(\'TEST\')">Whatever</a>' 

Como bozdoz dice:

You escape single quotes that are within single quotes; you escape double quotes that are within double quotes


Pero por qué no hacer

var content = $("<a />").attr("href", "#").text("Whatever").click(function(){ 
    displayContent('TEST') 
}); 

O como dice Nathan:

var content = $('<a href="#">Whatever</a>').click(
    function() { displayContent('TEST') 
}); 
+1

Para agregar a esto: se escapan las comillas simples que están dentro de comillas simples, se escapan las comillas dobles que están entre comillas dobles – bozdoz

+0

@bozdoz - No podría decirlo mejor, así que No lo intenté. Ver edición - gracias y +1 –

+0

Eso parece funcionar, pero si lo reemplazo ("PRUEBA") ¿obtengo el mismo error? ¿Por qué es eso? – CodeCrack

0

¡No necesita escapar de ellas en absoluto!

var content = '<a href="#" onclick="displayContent(\'TEST\')">Whatever</a>'; 

$("#placeHolder").html(content); 

Sólo tienen que así, como que no es necesario para escapar " por lo general, cuando en Embebido en un ';

Pero necesita escapar los caracteres ' cuando se trata de un parámetro de una función.

+0

Esto no funcionará (ha utilizado comillas dobles para el parámetro a 'displayContent', así como el valor del atributo' onclick'). –

1

Solo necesita escapar de las comillas cuando son del mismo tipo que las comillas de apertura y cierre. En su ejemplo, está escapando innecesariamente comillas dobles porque su cadena está envuelta entre comillas simples. Dicho esto, debido a las comillas dobles en la declaración onclick, el analizador tendrá problemas con la llamada al displayContent().

probar este lugar:

var content = '<a href="#" onclick="displayContent(\'TEST\')">Whatever</a>'; 
2

usted puede evitar ese desastre mediante la creación de elementos como esto:

var content = $("<a>", { 
    href: "#", 
    text: "whatever", 
    click: $.proxy(displayContent, 0, "TEST") 
}); 
+0

$ .proxy - Tendré que buscar uno +1 :) –

+0

¿No debería ser '$ .proxy (displayContent, null, 0," TEST ");' de lo contrario no intentará 0 (sin éxito) para establecerse en 'esto'? –

+0

@AdamRackis el primer argumento es la función, el segundo es el contexto ('0' es más corto para escribir que' null') y el resto son argumentos curried. El currying se agregó en 1.6, creo, ni siquiera está documentado. El 'Function # bind' nativo siempre contenía los argumentos curried, así que era un poco extraño' $ .proxy' no al principio. – Esailija

Cuestiones relacionadas