2012-03-21 2 views
7

Я знаю, что это будет что-то простое, что я просто не хватаю как-то, но здесь идет:ColdFusion/Javascript Бегства одинарной кавычки

У меня есть приложение ColdFusion, где пользователь может ввести текст на нескольких экранах. У меня есть функция javascript, которая проверяет введенный текст на то, что хранится в базе данных, и всплывает окно подтверждения с просьбой о том, хотят ли они сохранить или отменить изменения.

Если введенный пользователем текст содержит кавычки (одиночные или двойные), javascript полностью умирает. Мне нужно избегать цитат, сохраняя при этом возможность проверить соответствие содержимого.

Я пробовал функции escape() и replace() (одно и то же), но ничего не работает.

Пример 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 
    } 
} 

Благодаря.

+0

Если есть утилита JSON-encoding, используйте это. – Pointy

ответ

12

Встроенный jsStringFormat избежит для JavaScript

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

Это прекрасно, спасибо Сэму! Один вопрос: как я могу использовать его в переменной обратной связи (то есть, что пользователь ввел?) – shimmoril

+0

Edit: Nevermind, я понял: 'var feedback_string = document.getElementById ('feedback'). Value; var feedback = #jsStringFormat ('feedback_string') #; ' – shimmoril

0

Я не знаю ColdFusion, но в соответствии с Документами:

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

Я думаю вам не нужно, чтобы добавить кавычки в явном виде, в виде строки, когда сериализуется в JSON должны закончить двойные кавычки так или иначе. Опять же, я не могу проверить это сам.

+0

Символы хэша в приведенном выше примере не нужны. –

+0

@DavidFaber действительно? Как ColdFusion знал, что это должно интерпретироваться как его код, а не JavaScript? – Pointy

+2

Необходимы хэш-символы. Я считаю, что Дэвид думал, что предполагаемая линия находится в контексте CF, но она находится в контексте JavaScript, предназначенном для использования в cfoutput –

0

Если вы ищете решение ColdFusion, вы, вероятно, хотите использовать это:

HTMLEditFormat(string) 

HTML маскирование строки строку. Символы возврата удаляются; Линейные символы сохраняются. Символы со специальными значениями в HTML преобразуются в объекты символов HTML, такие как >.

+0

Спасибо. Все, что происходит и происходит из БД, - это использование HTMLEditFormat, но введенные пользователем (несохраненные) данные действительно были проблемой. – shimmoril

+0

HTML-escaping не полезен, когда значение должно выводиться в код JavaScript. – Pointy

Смежные вопросы