2012-03-21 14 views
7

wiem, że to będzie coś proste, że jestem po prostu brakuje jakoś, ale tu idzie:ColdFusion/Javascript Ucieczka Cytat Pojedyncze

Mam aplikacji ColdFusion, gdzie użytkownik może wprowadzić tekst na wielu ekranach. Mam funkcję javascript, która sprawdza wprowadzony tekst w odniesieniu do tego, co jest przechowywane w bazie danych, i wyświetla okno z prośbą o potwierdzenie, czy chce zapisać/odrzucić zmiany.

Jeśli tekst wprowadzony przez użytkownika zawiera cudzysłów (pojedynczy lub podwójny), javascript umiera całkowicie. Muszę uciec od cytatów, zachowując jednocześnie możliwość sprawdzenia zgodności treści.

Próbowałem funkcji escape() i replace() (pojedynczo i razem), ale nic nie działa.

Przykład JavaScript:

function change_question(){ 
    var feedback = document.getElementById('feedback').value; //this is what the user has entered on the page 
    var stored_feedback = "#trim(StoredFeedback)#"; //this is what is stored in the database; retrieved via ColdFusion 

    if (feedback != stored_feedback) { 
     if (confirm('You have unsaved data on the page. Do you wish to discard your changes?')) { 
      //go to next page 
     } 
    } 
    else { 
      //go to next page 
    } 
} 

Dzięki.

+0

Jeśli istnieje narzędzie kodujące JSON, użyj tego. – Pointy

Odpowiedz

12

Wbudowany jsStringFormat ujdzie język JavaScript

var stored_feedback = "#jsStringFormat(StoredFeedback)#"; 
+0

To jest idealne, dzięki Sam! Jedno pytanie - jak mogę go użyć na zmiennej sprzężenia zwrotnego (tj. Co wprowadził użytkownik?) – shimmoril

+0

Edycja: Nieważne, odkryłem: "var feedback_string = document.getElementById ('feedback'). var feedback = #jsStringFormat ('feedback_string') #; ' – shimmoril

0

Nie wiem, ColdFusion, ale zgodnie z docs:

var stored_feedback = #SerializeJSON(trim(StoredFeedback))#; 

myślę nie ma potrzeby, aby dodać cytaty wyraźnie, jak po sznurku szeregowane do JSON należy skończyć z cudzysłowach tak czy inaczej. I znowu nie mogę tego przetestować.

+0

Hasła w powyższym są niepotrzebne. –

+0

@DavidFaber naprawdę? W jaki sposób ColdFusion wie, że powinno to być interpretowane jako kod, a nie JavaScript? – Pointy

+2

Potrzebne są znaki skrótu. Wierzę, że David myślał, że zamierzona linia była w kontekście CF, ale jest w kontekście JavaScript przeznaczonym do użycia w ramach cfoutput –

0

Jeśli szukasz rozwiązania ColdFusion, prawdopodobnie będziesz chciał korzystać z tego:

HTMLEditFormat(string) 

HTML-uciekł ciąg znaków. Znaki zwracane są usuwane; znaki linii są zachowane. Znaki o specjalnym znaczeniu w HTML są konwertowane na obiekty znaków HTML, takie jak >.

+0

Dzięki. Wszystko, co przychodzi i przychodzi z DB, używa HTMLEditFormat, ale dane wprowadzone przez użytkownika (niezapisane) były naprawdę problemem. – shimmoril

+0

Wywracanie kodu HTML nie jest przydatne, gdy wartość ma być wyprowadzana do kodu JavaScript. – Pointy