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?

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.


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.


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.


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();

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();
    },

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();

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.


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.


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.


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
});

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();
        }
    });

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();

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.



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>



1

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

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

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})

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 :(



-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');
     });

-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


Apporter des modifications de ce genre provoque de terribles problèmes de mise à niveau.
usr
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.