2012-01-17 11 views
6

Sto cercando di creare un link cliccabile in javascriptSto evitando le stringhe in modo errato in JavaScript?

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

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

ma continuo a ricevere un errore

Uncaught SyntaxError: Unexpected token }

Non è forse il modo corretto per sfuggire le virgolette e di creare un collegamento?

+1

C'è codice manca qui. Non ci sono caratteri} nell'esempio di codice che hai fornito. – ceejayoz

+0

Sembra che la causa non rientri nell'ambito di questo snippet. – Dykam

+0

Stai sfuggendo le virgolette correttamente almeno –

risposta

7

Hai solo bisogno di sfuggire le virgolette singole

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

Come bozdoz dice:

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


Ma perché non fare

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

O, come dice Nathan:

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

Per aggiungere a questo: si evitano le virgolette singole che si trovano tra virgolette singole, si evitano le virgolette doppie tra virgolette doppie – bozdoz

+0

@bozdoz - Non potrei dirlo meglio, quindi Vedere la modifica - grazie e +1 –

+0

Sembra funzionare ma se lo sostituisco con ("TEST") ottengo lo stesso errore? WHY is that – CodeCrack

0

Non è necessario per sfuggire a tutti!

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

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

Basta avere in quel modo, come non c'è bisogno di fuggire " solito, quando in embeded in un ';

Ma è necessario evitare i caratteri ' quando è un parametro in una funzione.

+0

Questo non funzionerà (hai usato le virgolette per il parametro su 'displayContent' e il valore dell'attributo' onclick'). –

1

È sufficiente sfuggire alle virgolette quando sono dello stesso tipo utilizzato dalle virgolette di apertura e chiusura. Nel tuo esempio, stai evitando inutilmente virgolette doppie perché la tua stringa è racchiusa tra virgolette singole. Detto questo, a causa delle doppie virgolette nella dichiarazione onclick il parser avrà problemi con la chiamata a displayContent().

Prova questo, invece:

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

si può evitare che pasticcio con la creazione di elementi come questo:

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

$ .proxy - Dovrò vederlo +1 +1 :) –

+0

Non dovrebbe essere '$ .proxy (displayContent, null, 0," TEST ");' altrimenti no 0 (senza successo) provare per essere impostato su 'this'? –

+0

@AdamRackis il primo argomento è la funzione, il secondo è contesto ('0' è più breve da scrivere di' null') e il resto sono argomenti al curry. Il curry è stato aggiunto in 1.6, penso, non è nemmeno documentato. Anche il 'Function # bind' nativo era sempre al curry degli argomenti, quindi all'inizio era piuttosto strano' $ .proxy'. – Esailija

Problemi correlati