2013-01-23 11 views
45

http://jqueryui.com/upgrade-guide/1.10/#changed-title-option-from-html-to-textUtilizzando HTML nel titolo di una finestra di dialogo in jQuery UI 1,10

jQuery UI 1.10 fatto in modo che il titolo della finestra può essere solo testo (no HTML) per prevenire le vulnerabilità di scripting. Non sto permettendo l'input dell'utente per generare questo titolo, quindi mi piacerebbe comunque usare l'HTML, principalmente per visualizzare un'icona a sinistra del titolo.

Ho intenzione di pubblicare la mia soluzione a questo problema perché non ho visto nessun altro chiedere o rispondere ancora. Spero che possa aiutare qualcun altro, o qualcun altro potrebbe avere un approccio migliore.

Maggiori informazioni sul motivo per cui lo hanno fatto: http://bugs.jqueryui.com/ticket/6016

+1

Questo mi ha infastidito, grazie! –

risposta

68

Questo sovrascriverà la funzione utilizzata quando si impostano i titoli di dialogo jQuery UI, permettendo così di contenere HTML.

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

grazie, a un certo punto stavo impostando manualmente il codice HTML tramite gli attributi, che risolve questo problema, grazie – relipse

9

Se si esita a sovrascrivere il metodo _title di jQuery, è possibile utilizzare il codice HTML, aggiungere o metodi simili sull'elemento titolo all'evento open dialogo jQuery, in questo modo:

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

È possibile che questo analizza correttamente l'HTML ignorando il metodo del titolo di jQuery. E poiché accade all'evento aperto, l'esperienza dell'utente rimane senza soluzione di continuità. Ho fatto questo su un progetto, e ha funzionato magnificamente.

+9

Se si usa 'open', continuerà ad aggiungersi. In questo caso il 'create' è l'evento giusto. http://api.jqueryui.com/dialog/#event-create – Rudy

+6

Se si utilizzi o meno la funzione di creazione, AGGIUNGI un ambito di qualche tipo !! per esempio. 'create: function() {$ (this) .siblings(). find (". ui-dialog-title "). html ('il mio titolo html'); } ' – 321X

+0

@Rudy Create lo farebbe anche, ma aprire era quello che funzionava meglio in quel caso particolare. Sia che si utilizzi l'opzione open, create, o qualche opzione futura, ancora scritta, il metodo di scelta per questo è più relativo all'implementazione particolare ... a meno che non ci sia qualcosa che mi manca riguardo a open che rende questo un no-no serio. Se c'è, dillo. – luzmcosta

Problemi correlati