Dialogue jquery UI: comment initialiser sans barre de titre?

254

Est-il possible d'ouvrir une boîte de dialogue jQuery UI sans barre de titre?

Loony2nz
la source

Réponses:

289

Je pense que la meilleure solution est d'utiliser l'option dialogClass.

Un extrait des documents jquery UI:

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

ou si vous voulez après init. :

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

J'ai donc créé une boîte de dialogue avec l'option dialogClass = 'noTitleStuff' et le CSS comme ça:

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

trop simple !! mais j'ai pris 1 jour pour penser pourquoi ma méthode de forage précédente id-> class ne fonctionnait pas. En fait, lorsque vous appelez la .dialog()méthode, le div que vous transformez devient l'enfant d'un autre div (le vrai dialogue div) et peut-être un `` frère '' du titlebardiv, il est donc très difficile d'essayer de trouver ce dernier à partir de l'ancien.

mizar
la source
2
+1 La solution de Jonatan ne fonctionne pas pour un dialogue particulier. Le vôtre.
cetnar
1
Je suis d'accord avec mizar. C'est la meilleure solution car celle-ci vous permet d'être spécifique aux boîtes de dialogue qui n'ont que la classe que vous avez définie.
Carlos Pinto
2
le seul inconvénient de cette méthode est que Chrome ajoute une barre de défilement verticale pour une telle boîte de dialogue lorsqu'elle est configurée comme modale, car jQuery commence à calculer incorrectement sa hauteur de superposition de widget ui ... Je n'ai pas creusé plus profondément, et je n'ai pas pas de solution rapide en dehors de hacky {overflow: hidden}
dimsuz
1
dialogClass est obsolète dans jquery v 1.12 et n'affecte pas l'objet de dialogue comme prévu.
Mini réfrigérateur
1
L'option dialogClass a été déconseillée au profit de l'option classes, à l'aide de la propriété ui-dialog.
Sandeep Saroha
96

J'ai trouvé un correctif pour supprimer dynamiquement la barre de titre.

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

Cela supprimera tous les éléments avec la classe 'ui-dialog-titlebar' après le rendu de la boîte de dialogue.

Loony2nz
la source
3
... et l'option css supprime toute chance qu'ils apparaissent avant. Je ne suis pas sûr de voir un quelconque avantage dans votre alternative. En réalité, votre alternative va faire ce que j'ai fait, en ajoutant seulement une étape supplémentaire. Aller sur la route CSS sera plus rapide.
Sampson
10
Eh bien, mon option ne supprimera que la barre de titre de cette boîte de dialogue. Si j'utilisais votre option, je supprimerais la barre de titre de toutes mes boîtes de dialogue. Je peux voir à l'avenir que j'aurai besoin d'une barre de titre.
Loony2nz
2
Donc , vous incluez votre élément dans le css règle: #example .ui-dialog-titlebar.... Cela fonctionnera de toute façon; mais le Javascript va éventuellement définir le css, donc je ne vois pas l'avantage de ne pas le faire en css pour commencer. Cela ne fait vraiment pas beaucoup de différence - ce avec quoi vous êtes le plus à l'aise :)
Sampson
2
Est-ce juste moi ou #example n'a-t-il pas de portée sur le titre de la boîte de dialogue?
Rio
2
@Rice Flour Cookies: Le .hide () doit venir après .dialog () car .dialog () est ce qui injecte le balisage de la boîte de dialogue dans la page. Avant cet appel, la page n'a pas encore d'éléments de dialogue.
Jeremy Wiebe
62

Je pense que vous pouvez le cacher avec CSS:

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

Alternativement, vous pouvez l'appliquer à des boîtes de dialogue spécifiques avec l' dialogClassoption:

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

Découvrez " Theming " la boîte de dialogue. La suggestion ci-dessus utilise l' dialogClassoption, qui semble être sur le point de disparaître en faveur d'une nouvelle méthode.

Sampson
la source
Oui, je suppose que cela fonctionnerait, mais c'est une option globale. Je me demandais s'il y avait un moyen de le faire avec des options. Je suppose que je peux faire un certain rendu avant le rendu pour supprimer le titre div avant qu'il ne soit affiché.
Loony2nz
2
Non, je ne pense pas qu'il y ait une option pour le supprimer. Par défaut, c'est le bouton de fermeture, donc dans un sens, il est presque de mauvaise conception.
Sampson
3
Quand les gens parlent trop de CSS, ils épellent-drôle, n'est-ce pas
bobobobo
De plus, vous ne devriez probablement pas le supprimer car vous ne pourrez plus déplacer la boîte de dialogue après cela. Probablement mieux de ne pas mettre de texte dedans et de le remodeler pour qu'il soit sombre et fin
bobobobo
Si vous avez un autre événement qui déclenche la méthode de fermeture de la boîte de dialogue, il peut y avoir des cas où vous n'avez pas besoin du bouton de fermeture dans la barre de titre.
Carlos Pinto
55

J'utilise ceci dans mes projets

$("#myDialog").dialog(dialogOpts);
// remove the title bar
$("#myDialog").siblings('div.ui-dialog-titlebar').remove();
// one liner
$("#myDialog").dialog(dialogOpts).siblings('.ui-dialog-titlebar').remove();
Amirouche Douda
la source
7
Encore mieux: supprimez la barre de titre mais pas le bouton de fermeture. Gardez sa fonctionnalité. $(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();est la meilleure réponse à mon avis +1 pour cette ligne de code
Jaylen
Ou vous pouvez simplement rechercher le frère précédent, qui est la barre de titre: .ui-dialog-titlebar: $("#myDialog").prev().hide()ou $("#myDialog").prev(".ui-dialog-titlebar").hide().
Andrew
Votez parce que j'ai deux divisions et je voulais en cacher une seule.
Marcus Becker
15

Cela a fonctionné pour moi:

$("#dialog").dialog({
    create: function (event, ui) {
        $(".ui-widget-header").hide();
    },
Koder
la source
1
Cela masquera les en-têtes dans toutes les boîtes de dialogue. Ma suggestion ci-dessous (réponse suivante) le fera juste pour la boîte de dialogue actuellement ouverte.
ingrédient_15939
Bien ... Cela signifie que je n'ai pas à masquer toutes les boîtes de dialogue en raison de la classe CSS de base ... cela signifie également que je n'ai pas à configurer ma boîte de dialogue séparément, puis à supprimer le titre.
Gwasshoppa
8

Essayez d'utiliser

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

Cela masquera tous les titres des dialogues

$(".ui-dialog-titlebar").hide();
Firas Abd Alrahman
la source
7

En fait, il y a encore une autre façon de le faire, en utilisant widgetdirectement la boîte de dialogue :

Vous pouvez ainsi obtenir le Widget de dialogue

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

puis faire

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

pour masquer le titlebarcontenu de cette boîte de dialogue uniquement

et dans une seule ligne de code (j'aime enchaîner):

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

Pas besoin d'ajouter une classe supplémentaire à la boîte de dialogue de cette façon, allez-y directement. Ça marche bien pour moi.

odedbd
la source
5

Je trouve plus efficace et plus lisible d'utiliser l' événement ouvert et de masquer la barre de titre à partir de là. Je n'aime pas utiliser les recherches de nom de classe de page globale.

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

Facile.

ingrédient_15939
la source
2
C'est la méthode que j'ai choisie, mais j'ai utilisé la fonction create: pour qu'elle soit toujours masquée, pas seulement lorsque la boîte de dialogue est affichée. Je l'ai également changé en .remove () au lieu de .hide () pour m'assurer qu'il a complètement disparu de la boîte de dialogue.
Chris Porter
4

Vous pouvez utiliser jquery pour masquer la barre de titre après avoir utilisé dialogClass lors de l'initialisation de la boîte de dialogue.

pendant l'init:

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

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

En utilisant cette méthode, vous n'avez pas besoin de modifier votre fichier css, ce qui est également dynamique.

Arun Vasudevan Nair
la source
1
Oui, c'était la solution de mizar - publiée 6 mois avant la vôtre.
Kirk Woll
Je suis d'accord, mais vous devrez également ajouter une entrée CSS, ce qui complique la solution. Ma suggestion s'occupe du problème en utilisant uniquement jQuery.
Arun Vasudevan Nair
4

J'aime remplacer les widgets 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);

Vous pouvez donc maintenant configurer si vous souhaitez afficher la barre de titre ou non

   $('#mydialog').dialog({
      headerVisible: false // or true
});
Andrej Kaurin
la source
4

Si vous avez plusieurs boîtes de dialogue, vous pouvez utiliser ceci:

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

C'est la façon la plus simple de le faire et cela supprimera uniquement la barre de titre dans cette boîte de dialogue spécifique;

$('.dialog_selector').find('.ui-dialog-titlebar').hide();
pdubbb1
la source
2

La seule chose que j'ai découverte en masquant la barre de titre de la boîte de dialogue est que, même si l'affichage n'est pas affiché, les lecteurs d'écran la prennent et la lisent. Si vous avez déjà ajouté votre propre barre de titre, elle lira les deux, ce qui créera de la confusion.

Ce que j'ai fait a été supprimé du DOM en utilisant $(selector).remove(). Les lecteurs d'écran (et tous les autres) ne le verront plus car il n'existe plus.

user616258
la source
2

Essaye ça

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

remplacer dividpar correspondantid

abdulkaderjeelani
la source
2

Ce formulaire suivant m'a résolu le problème.

$('#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>

jcromeros1987
la source
1

Cela a fonctionné pour moi de masquer la barre de titre de la boîte de dialogue:

$(".ui-dialog-titlebar" ).css("display", "none" );
user1712742
la source
1

Voici comment cela peut être fait.

Allez dans le dossier des thèmes -> base -> ouvrez jquery.ui.dialog.css

Trouver

Abonnements

si vous ne voulez pas afficher titleBar, définissez simplement display: none comme je l'ai fait ci-dessous.

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

Samilarly pour le titre aussi.

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

Vient maintenant le bouton de fermeture, vous pouvez également le définir aucun ou vous pouvez définir son

.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;

}

J'ai fait beaucoup de recherches mais rien alors j'ai eu cette idée en tête. Cependant, cela affectera l'application entière à ne pas avoir de bouton de fermeture, de barre de titre pour la boîte de dialogue, mais vous pouvez également surmonter cela en utilisant jquery et en ajoutant et en définissant css via jquery

voici la syntaxe pour cela

$(".specificclass").css({display:normal})
ProgrammationNinja
la source
1
Cela fonctionne et est utile pour comprendre que cela peut être fait, mais si vous avez plusieurs .dialogs()et seulement 1 ou si vous avez besoin de ces paramètres, il existe d'autres itinéraires que d'appliquer les paramètres globalement de cette façon.
Chef_Code
0

Pour moi, je voulais toujours utiliser les coins redimensionnables, je ne voulais tout simplement pas voir les lignes diagonales. j'ai utilisé

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

Je viens de réaliser que je commentais la mauvaise question. À la hauteur de mon homonyme :(

controlZ
la source
0

Avez-vous essayé la solution à partir des documents jQuery UI? https://api.jqueryui.com/dialog/#method-open

Comme il est dit, vous pouvez faire comme ça ...

En CSS:

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

En JS:

$( "#dialog" ).dialog({
  dialogClass: "no-titlebar"
});
Олег Всильдеревьев
la source
-1

Vous pouvez supprimer la barre avec l'icône de fermeture avec les technologies décrites ci-dessus, puis ajouter vous-même une icône de fermeture.

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";

// ajoute ce div au div contenant votre contenu

JS:

 $(closeDiv).click(function () {
         $("yourDialogContent").dialog('close');
     });
Jacob
la source
-1

allez dans votre jquery-ui.js (dans mon cas jquery-ui-1.10.3.custom.js) et recherchez this._createTitlebar (); et le commenter.

maintenant, n'importe lequel de vos dialogues apparaîtra avec des en-têtes. Si vous souhaitez personnaliser l'en-tête, allez simplement dans _createTitlebar (); et éditez le code à l'intérieur.

par

user2575051
la source
Apporter des modifications de ce genre provoque de terribles problèmes de mise à niveau.
usr