2010-03-31 67 views
0

不幸的是,這是一個特定的請求。比較javascript中兩個不同來源的字符串

我有一個CMS,允許用戶輸入文本到他們所做的各種職位的tinymce編輯器。編輯器通過ajax加載,允許從一個頁面編輯多個帖子。如果單擊取消,我希望能夠檢查是否對主文本進行了編輯。

目前我在ajax調用期間從數據庫中獲取文本的值,json_encode,然後在回調期間將其存儲在一個javascript變量中,以便稍後進行檢查。當單擊了取消隱藏textarea的電流值(使用TinyMCE的存儲提交的數據)使用jquery.val()被抓住,並從以前的Ajax調用覈對存儲的值是這樣的:

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

即使沒有更改,它當前總是返回true。

這個問題似乎是textarea.val()使用html實體,而ajax jsoned版本不。

從螢火阿賈克斯的反應是這樣的:

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

textarea的源代碼如下所示:

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

這些都是明顯的不同,但我怎麼可以讓他們來處理如同評估一樣?

是否有一個函數比較字符串的最終輸出或使用javascript將一個字符串轉換爲另一個字符串的方式?

我試着在ajax頁面中使用html實體,但是這個返回的字符串與html實體完好無損時警告,我假設因爲json_encoding它把它們變成了字符。

任何幫助將不勝感激。

+0

你應該使用firebug來調試你的JS。 console.log(stored_value,' - ',textarea.val())我不知道你是否正確使用jquery,因爲你應該使用$('textarea#mytextarea')。 – 2010-03-31 12:06:55

+0

對不起,這是我縮寫的東西,以節省時間打字,我使用類似$(textarea#mytextarea')。val(),但簡化到textarea.val()顯示我得到的textarea的值。 – andyface 2010-04-06 09:24:46

回答

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 2010-03-31 12:32:08

+0

這似乎是做伎倆,謝謝。 – andyface 2010-03-31 16:04:13

0

隨着prototype你只需要逃避Ajax響應之前比較一下:

ajaxResponse.escapeHTML(); 

使用jQuery我認爲這是一個多一點不同。試試這個:

Escaping strings with Jquery

+0

感謝您的回覆,我不喜歡使用原型庫以及jQuery,並且jquery解決方案似乎不適用於.val().text()。 – andyface 2010-03-31 15:27:41

0

爲什麼不嘗試不同的方法?

嘗試比較textarea.defaultValuetextarea.value提交表單之前。如果這些值相同,則用戶不會改變任何內容。

+0

我可能會這樣做,因爲它似乎是最合乎邏輯的做事方式,我記得閱讀了有關defaultValue屬性(如果它是一個屬性)但之前沒有使用它的。 – andyface 2010-04-06 09:25:47