2010-03-31 2 views
0

К сожалению, это немного конкретный запрос.Сравнение строк из двух разных источников в javascript

У меня есть CMS, которая позволяет пользователю вводить текст в редактор tinymce для различных сообщений, которые они сделали. Редактор загружается через ajax, чтобы разрешить редактирование нескольких сообщений с одной страницы. Я хочу, чтобы проверить, были ли внесены изменения в основной текст, если нажата кнопка отмены.

В настоящее время я получаю значение текста из базы данных во время вызова ajax, json_encode, а затем сохраняю его в переменной javascript во время обратного вызова, для проверки позже. При нажатии отменить текущее значение скрытого текстового поля (используется TinyMCE для хранения данных для представления) хватают с помощью jquery.val() и сверяются с сохраненным значением из предыдущего вызова Ajax, как это:

if(stored_value!=textarea.val()) 
{ 
    return true 
} 

В настоящее время он всегда возвращает true, даже если никаких изменений не было сделано.

Проблема заключается в том, что textarea.val() использует html-объекты, тогда как версия ajax jsoned не поддерживает.

ответ от AJAX в поджигатель выглядит следующим образом:

<p>some text<\/p>\r\n<p>some more text<\/p> 

текстовое поле исходный код выглядит следующим образом:

&lt;p&gt;some text&lt;/p&gt; 
&lt;p&gt;some more text&lt;/p&gt; 

это явно разные, но как я могу заставить их лечиться как то же самое при оценке?

Есть функция, которая сравнивает окончательный вывод строки или способ конвертировать одну строку в другую с помощью javascript?

Я пробовал использовать html-объекты на странице ajax, но это возвращало строку с объектами html, когда они были повреждены, я предполагаю, что json_encoding превратил их в символы.

Любая помощь была бы принята с благодарностью.

+0

Вы должны использовать firebug для отладки JS. console.log (stored_value, '-', textarea.val()) Интересно, правильно ли вы используете jquery, так как вы должны использовать $ ('textarea # mytextarea'). val(); –

+0

Извините, что я сократил все, чтобы сэкономить время на ввод, я использую что-то вроде $ (textarea # mytextarea '). Val(), но упрощал это для textarea.val(), чтобы показать, что я получаю значение textarea. – andyface

ответ

0

Я действительно не считаю, что это лучший способ, с JQuery, но это работает.

var test = "&lt;p&gt;some text&lt;/p&gt;"; 
var dummy = $("<p/>"); 
test = dummy.text(dummy.html(test)); 

alert(test); 
+0

Внутренне, Prototype делает что-то подобное, чтобы справиться с HTML-экранированием, поэтому я не думаю, что это так плохо. – Pointy

+0

Это похоже на трюк, спасибо. – andyface

0

С prototype вам просто нужно, чтобы избежать ответа Ajax, прежде чем сравнить его:

ajaxResponse.escapeHTML(); 

С JQuery Я думаю, что немного больше по-другому. Попробуйте это:

Escaping strings with Jquery

+0

спасибо за ответ, я не хочу использовать библиотеку прототипов, а также jquery, а решение jquery, похоже, не работает с .val() only .text(). – andyface

0

Почему вы не пытаетесь использовать другой подход?

Попробуйте сравнить textarea.defaultValue и textarea.value перед отправкой формы. Если эти значения равны, пользователь ничего не изменил.

+0

Я могу отдать это, поскольку это кажется самым логичным способом делать вещи, я помню, как читал об атрибуте defaultValue (если это атрибут), но раньше не использовал его. – andyface