2013-01-23 93 views
45

http://jqueryui.com/upgrade-guide/1.10/#changed-title-option-from-html-to-text在jQuery UI的使用在對話框的標題HTML 1.10

jQuery UI的1.10說得那麼該對話框的標題只能是文本(非HTML),以防止腳本漏洞。我不允許用戶輸入來生成該標題,所以我仍然想使用HTML,主要是在標題左側顯示一個圖標。

我打算髮布我的解決方案來解決這個問題,因爲我還沒有看到其他人要求或回答這個問題。希望它能幫助別人,或者別人可能會有更好的方法。

更多信息,爲什麼他們這樣做是:http://bugs.jqueryui.com/ticket/6016

+1

這讓我很懊惱,謝謝! –

回答

68

這將覆蓋設置jQuery用戶界面對話框的標題時,允許其包含HTML使用的功能。

$.widget("ui.dialog", $.extend({}, $.ui.dialog.prototype, { 
    _title: function(title) { 
     if (!this.options.title) { 
      title.html(" "); 
     } else { 
      title.html(this.options.title); 
     } 
    } 
})); 
+0

謝謝,有一次,我通過屬性手動設置html,修復了這個問題,謝謝 – relipse

9

如果你猶豫,覆蓋jQuery的_title方法,你可以使用HTML,追加,或在jQuery的對話框的開放活動的標題元素上類似的方法,就像這樣:

$("#element").dialog({ 
    open: function() { 
    $(this).find("span.ui-dialog-title").append("<span class='title'>" + subtitle + "</span>"); 
    } 
}); 

以上正確解析HTML,同時繞過jQuery的標題方法。而且,由於它發生在公開活動中,用戶體驗依然無縫。只是在一個項目上做了這個,而且它的工作很好。

+9

如果你使用'open',它將繼續追加。在這種情況下,「創造」是正確的事件。 http://api.jqueryui.com/dialog/#event-create – Rudy

+6

無論你是否使用create函數,添加somekind的範圍!例如'create:function(){$(this).siblings()。find(「。ui-dialog-title」)。html('我的html標題'); }' – 321X

+0

@Rudy Create也會這樣做,但是開放是在這種特殊情況下效果最好的。無論是使用開放,創建還是未來,還有一些未選擇的選項,選擇這種方法更多的是關於特定的實現......除非我錯過了關於開放的東西,這使得這是一個嚴肅的禁忌。如果有,請告訴。 – luzmcosta