finestra di dialogo dell'interfaccia utente jquery: come inizializzare senza una barra del titolo?


254

È possibile aprire una finestra di dialogo dell'interfaccia utente jQuery senza una barra del titolo?

Risposte:


289

Penso che la soluzione migliore sia usare l'opzione dialogClass.

Un estratto dai documenti dell'interfaccia utente di jquery:

durante init: $('.selector').dialog({ dialogClass: 'noTitleStuff' });

o se vuoi dopo init. :

$('.selector').dialog('option', 'dialogClass', 'noTitleStuff');

Quindi ho creato alcune finestre di dialogo con l'opzione dialogClass = 'noTitleStuff' e il CSS in questo modo:

.noTitleStuff .ui-dialog-titlebar {display:none}

Troppo facile !! ma ho impiegato 1 giorno per pensare al motivo per cui il mio precedente metodo di perforazione di classe id-> non funzionava. Infatti quando chiami .dialog()metodo il div che trasformi diventa figlio di un altro div (il vero dialog dialog div) e forse un "fratello" del titlebardiv, quindi è molto difficile provare a trovare quest'ultimo a partire dal primo.


2
+1 La soluzione di Jonatan non funziona per particolari dialoghi. Lo fa.
cetnar,

1
Sono d'accordo con mizar. Questa è la soluzione migliore perché ti permette di essere specifico per quelle finestre di dialogo che hanno solo la classe che hai definito.
Carlos Pinto,

2
l'unico aspetto negativo di questo metodo è che Chrome aggiunge una barra di scorrimento verticale per tale finestra di dialogo quando è configurato come modale, perché in qualche modo jQuery inizia a calcolare erroneamente la sua altezza di overlay ui-widget ... Non ho scavato più a fondo, e non ho trovare una soluzione rapida a parte hacky {overflow: nascosto}
dimsuz

1
dialogClass è obsoleto in jquery v 1.12 e non influisce sull'oggetto dialog come previsto.
Mini frigorifero

1
L'opzione dialogClass è stata deprecata a favore dell'opzione class, usando la proprietà ui-dialog.
Sandeep Saroha,

96

Ho trovato una soluzione per rimuovere dinamicamente la barra del titolo.

$("#example").dialog(dialogOpts);
// remove the title bar
$(".ui-dialog-titlebar").hide();

Questo rimuoverà tutti gli elementi con la classe 'ui-dialog-titlebar' dopo il rendering della finestra di dialogo.


3
... e l'opzione css rimuove ogni possibilità che vengano visualizzati prima. Non sono sicuro di vedere alcun vantaggio nella tua alternativa. In realtà, la tua alternativa farà quello che ho fatto, aggiungendo solo un ulteriore passaggio. Seguire il percorso CSS sarà più veloce.
Sampson,

10
Bene, la mia opzione rimuoverà solo la barra del titolo per questa finestra di dialogo. Se avessi usato la tua opzione, rimuoverei la barra del titolo per tutte le mie finestre di dialogo. In futuro vedrò che avrò bisogno di una barra del titolo.
Loony2nz,

2
Così si include il vostro elemento all'interno del CSS-regola: #example .ui-dialog-titlebar.... Funzionerà in entrambi i modi; ma Javascript alla fine imposterà il CSS, quindi non vedo il vantaggio di non farlo in CSS per cominciare. Non fa davvero molta differenza - qualunque cosa tu ti senta più a tuo agio :)
Sampson,

2
Sono solo io o #example non ha portata sul titolo della finestra di dialogo?
Rio,

2
@Rice Flour Cookies: .hide () deve venire dopo .dialog () perché .dialog () è ciò che inietta il markup per la finestra di dialogo nella pagina. Prima di quella chiamata, la pagina non ha ancora elementi di dialogo.
Jeremy Wiebe,

62

Credo che puoi nasconderlo con CSS:

.ui-dialog-titlebar {
    display: none;
}

In alternativa, puoi applicarlo a finestre di dialogo specifiche con l' dialogClassopzione:

$( "#createUserDialog" ).dialog({
    dialogClass: "no-titlebar"
});
.no-titlebar .ui-dialog-titlebar {
    display: none;
}

Dai un'occhiata a " Temi " nella finestra di dialogo. Il suggerimento di cui sopra fa uso dialogClassdell'opzione, che sembra essere in procinto di uscire a favore di un nuovo metodo.


Sì, credo che funzionerebbe, ma è un'opzione globale. Mi chiedevo se ci fosse un modo per farlo con le opzioni. Immagino di poter eseguire alcuni jquery di pre-rendering per rimuovere il titolo div prima che venga mostrato.
Loony2nz,

2
No. Non credo che ci sia un'opzione per rimuoverlo. Di default è il pulsante di chiusura, quindi in un certo senso è quasi un cattivo design.
Sampson,

3
Quando le persone parlano troppo di CSS, si fanno incantesimi divertenti, vero
Bobobobo,

Inoltre, probabilmente non dovresti rimuoverlo poiché dopo non puoi più spostare la finestra di dialogo. Probabilmente è meglio non inserire alcun testo e ridisegnarlo in modo che sia scuro e sottile
bobobobo

Se hai qualche altro evento che attiva il metodo di chiusura della finestra di dialogo, possono esserci casi in cui non è necessario il pulsante di chiusura sulla barra del titolo.
Carlos Pinto,

55

Lo uso nei miei progetti

$("#myDialog").dialog(dialogOpts);
// remove the title bar
$("#myDialog").siblings('div.ui-dialog-titlebar').remove();
// one liner
$("#myDialog").dialog(dialogOpts).siblings('.ui-dialog-titlebar').remove();

7
Ancora meglio: rimuovere la barra del titolo ma non il pulsante di chiusura. Mantieni la sua funzionalità. $(document).ready(function() { $('#video').click(function(){ $( "#dialog" ).dialog().siblings('.ui-dialog-titlebar').removeClass('ui-widget-header'); }); });
Adrian P.

$("#myDialog").dialog('open').siblings('.ui-dialog-titlebar').remove();è la migliore risposta secondo me +1 per questa riga di codice
Jaylen,

Oppure potresti semplicemente cercare il fratello precedente, che è la barra del titolo: .ui-dialog-titlebar: $("#myDialog").prev().hide()o $("#myDialog").prev(".ui-dialog-titlebar").hide().
Andrew

Votazione perché ho due div e volevo nasconderne solo uno.
Marcus Becker,

15

Questo ha funzionato per me:

$("#dialog").dialog({
    create: function (event, ui) {
        $(".ui-widget-header").hide();
    },

1
Ciò nasconderà le intestazioni in tutte le finestre di dialogo. Il mio suggerimento di seguito (prossima risposta) lo farà solo per la finestra di dialogo attualmente aperta.
ingrediente_15939

Bello ... Ciò significa che non devo nascondere tutti i dialoghi a causa della classe css di base ... Significa anche che non devo impostare il mio dialogo separatamente e quindi rimuovere il titolo.
Gwasshoppa,

8

Prova a usare

$("#mydialog").closest(".ui-dialog-titlebar").hide();

Questo nasconderà tutti i titoli delle finestre di dialogo

$(".ui-dialog-titlebar").hide();

7

In realtà c'è ancora un altro modo per farlo, usando widgetdirettamente la finestra di dialogo :

È possibile ottenere il widget di dialogo in questo modo

$("#example").dialog(dialogOpts);
$dlgWidget = $('#example').dialog('widget');

e poi fallo

$dlgWidget.find(".ui-dialog-titlebar").hide();

per nascondere titlebarsolo quella finestra di dialogo

e in una singola riga di codice (mi piace concatenare):

$('#example').dialog('widget').find(".ui-dialog-titlebar").hide();

Non è necessario aggiungere una classe extra alla finestra di dialogo in questo modo, basta andare direttamente su di essa. Funziona bene per me.


5

Trovo più efficiente e più leggibile utilizzare l' evento aperto e nascondere la barra del titolo da lì. Non mi piace usare le ricerche di nomi di classe globali di pagine.

open: function() { $(this).closest(".ui-dialog").find(".ui-dialog-titlebar:first").hide(); }

Semplice.


2
Questo è il metodo che ho seguito ma ho usato la funzione create: in modo che sia sempre nascosta, non solo quando viene mostrata la finestra di dialogo. L'ho anche cambiato in un .remove () invece di .hide () per assicurarmi che sia completamente scomparso dalla finestra di dialogo.
Chris Porter,

4

Puoi usare jquery per nascondere la barra del titolo dopo aver usato dialogClass durante l'inizializzazione della finestra di dialogo.

durante init:

$('.selector').dialog({
    dialogClass: 'yourclassname'
});

$('.yourclassname div.ui-dialog-titlebar').hide();

Utilizzando questo metodo, non è necessario modificare il file CSS e anche questo è dinamico.


1
Sì, questa è stata la soluzione di mizar - pubblicata 6 mesi prima della tua.
Kirk Woll,

Sono d'accordo, ma poi dovrai aggiungere anche una voce CSS che complica la soluzione. Il mio suggerimento si occupa del problema usando solo jQuery.
Arun Vasudevan Nair,

4

Mi piace ignorare i widget jQuery.

(function ($) {
    $.widget("sauti.dialog", $.ui.dialog, {
        options: {
            headerVisible: false
        },
        _create: function () {
            // ready to generate button
            this._super("_create"); // for 18 would be $.Widget.prototype._create.call(this);
            // decide if header is visible
            if(this.options.headerVisible == false)
                this.uiDialogTitlebar.hide();
        },
        _setOption: function (key, value) {
            this._super(key, value); // for 1.8 would be $.Widget.prototype._setOption.apply( this, arguments );
            if (key === "headerVisible") {
                if (key == false)
                    this.uiDialogTitlebar.hide();
                else
                    this.uiDialogTitlebar.show();
                return;
            }
        }
    });
})(jQuery);

Quindi ora puoi impostare se vuoi mostrare la barra del titolo o meno

   $('#mydialog').dialog({
      headerVisible: false // or true
});

4

Se hai più finestre di dialogo, puoi usare questo:

$("#the_dialog").dialog({
        open: function(event, ui) { 
            //hide titlebar.
            $(this).parent().children('.ui-dialog-titlebar').hide();
        }
    });

3

Questo è il modo più semplice per farlo e rimuoverà la barra del titolo solo in quella finestra di dialogo specifica;

$('.dialog_selector').find('.ui-dialog-titlebar').hide();

2

L'unica cosa che ho scoperto nascondendo la barra del titolo della finestra di dialogo è che, anche se il display non è nessuno, gli screen reader lo raccolgono e lo leggeranno. Se hai già aggiunto la tua barra del titolo, leggerà entrambi, causando confusione.

Quello che ho fatto è stato rimosso dal DOM usando $(selector).remove(). Ora gli screen reader (e tutti gli altri) non lo vedranno perché non esiste più.


2

Prova questo

$("#ui-dialog-title-divid").parent().hide();

sostituire dividcon corrispondenteid


2

Questo modulo successivo mi ha risolto il problema.

$('#btnShow').click(function() {
  $("#basicModal").dialog({
    modal: true,
    height: 300,
    width: 400,
    create: function() {
      $(".ui-dialog").find(".ui-dialog-titlebar").css({
        'background-image': 'none',
        'background-color': 'white',
        'border': 'none'
      });
    }
  });
});
#basicModal {
  display: none;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/smoothness/jquery-ui.css" />
<div id="basicModal">
  Here your HTML content
</div>
<button id="btnShow">Show me!</button>



1

Questo ha funzionato per me nascondere la barra del titolo della finestra di dialogo:

$(".ui-dialog-titlebar" ).css("display", "none" );

1

Ecco come si può fare.

Vai alla cartella temi -> base -> apri jquery.ui.dialog.css

Trova

chi segue

se non si desidera visualizzare titleBar, impostare semplicemente display: none come ho fatto nel seguito.

.ui dialog.ui-dialog .ui-dialog-titlebar 
{
    padding: .4em 1em;
    position: relative;
        display:none;
}

Samilarly anche per il titolo.

.ui-dialog .ui-dialog-title {
    float: left;
    margin: .1em 0;
    white-space: nowrap;
    width: 90%;
    overflow: hidden;
    text-overflow: ellipsis;
    display:none; 
}

Ora viene il pulsante di chiusura che puoi anche impostare nessuno o puoi impostarlo

.ui-dialog .ui-dialog-titlebar-close {
    position: absolute;
    right: .3em;
    top: 50%;
    width: 21px;
    margin: -10px 0 0 0;
    padding: 1px;
    height: 20px;

   display:none;

}

Ho fatto molte ricerche, ma niente mi è venuta in mente questa idea. Tuttavia, ciò influirà sull'intera applicazione in modo da non avere il pulsante di chiusura, la barra del titolo per la finestra di dialogo, ma puoi anche superare questo utilizzando jquery e aggiungendo e impostando css tramite jquery

ecco la sintassi per questo

$(".specificclass").css({display:normal})

1
Funziona ed è utile capire che ciò può essere fatto, ma se hai più .dialogs()e solo 1 o giù di lì hai bisogno di queste impostazioni, allora ci sono percorsi alternativi rispetto all'applicazione globale delle impostazioni in questo modo.
Chef_Code

0

Per me, volevo ancora usare gli angoli ridimensionabili, ma non volevo, quindi vedere le linee diagonali. ero solito

$(".ui-resizable-handle").css("opacity","0");

Ho appena realizzato che stavo commentando la domanda sbagliata. Vivere fino al mio omonimo :(



-1

È possibile rimuovere la barra con l'icona di chiusura con le tecniche sopra descritte e quindi aggiungere un'icona di chiusura.

CSS:

.CloseButton {
background: url('../icons/close-button.png');   
width:15px;
height:15px;
border: 0px solid white;
top:0;
right:0;
position:absolute;
cursor: pointer;
z-index:999;
}

HTML:

var closeDiv = document.createElement("div");
closeDiv.className = "CloseButton";

// aggiungi questo div al div che contiene i tuoi contenuti

JS:

 $(closeDiv).click(function () {
         $("yourDialogContent").dialog('close');
     });

-1

vai su jquery-ui.js (nel mio caso jquery-ui-1.10.3.custom.js) e cerca this._createTitlebar (); e commentalo.

ora qualcuno della tua finestra di dialogo apparirà con le intestazioni. Se vuoi personalizzare l'intestazione vai su _createTitlebar (); e modifica il codice all'interno.

di


Apportare modifiche del genere provoca un terribile dolore di aggiornamento.
usr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.