2011-04-16 43 views
0

在我的頁面的一側,我有一個非常簡單的電子郵件表單。另一方面,我對預計的電子郵件進行了預覽。例如:如何在Rails中轉義javascript生成的html?

enter image description here

當用戶完成了場,我想更新KEYUP預覽。我寫了一個小js函數來做到這一點:

var email_previewer = function() { 
    var fields = [ 
    { input: $('input#editor_invitation_to'), preview: $('dt.to') }, 
    { input: $('#editor_invitation_message'), preview: $('#message') } 
    ]; 

    var perserve_linebreaks = function(text) { 
    var html = text.replace(/\r\n\r\n/g, "</p><p>"), 
     html = html.replace(/\r\n/g, "<br />"), 
     html = html.replace(/\n\n/g, "</p><p>"), 
     html = html.replace(/\n/g, "<br />"), 
     html = "<p>"+html+"</p>"; 
    return html; 
    }; 

    var sync_text = function(input, preview) { 
    var text = input.val(); 
    if (input.is('textarea')) { 
     text = perserve_linebreaks(text); 
    } 
    preview.text(text); 
    } 

    // sync preview on page load 
    $.each(fields, function(index, field) { 
    sync_text(field.input, field.preview); 
    }); 

    // create keyup events 
    $.each(fields, function(index, field) { 
    field.input.keyup(function() { 
     sync_text(field.input, field.preview); 
    }); 
    }); 

}(); 

一切都很正常,除了鐵軌想要逃離我的HTML,使它看起來像廢話:

enter image description here

通常情況下,我知道這是沒問題:只需加上rawhtml_safe即可。但是我不能這樣做,因爲標記是在keyup(或頁面加載)上動態構建的。我錯過了一些簡單的解決方案?任何解決方法的想法?我唯一的想法是在iframe中加載預覽,這看起來很奇怪。

這真是讓人沮喪。有人請幫忙!

回答

1

我會立即懷疑preview.text(text)在您的sync_text功能。這應該是在DOM中創建一個文本節點,並且您想要設置innerHTML以便創建多個節點。

+2

嘗試preview.html(文本),而不是preview.text(文本) – 2011-04-16 00:27:25

+0

沒錯。多謝你們。對不起,我錯過了。 – 2011-04-16 04:35:31