jquery UIダイアログ:タイトルバーなしで初期化する方法?


254

タイトルバーなしでjQuery UIダイアログを開くことは可能ですか?

回答:


289

最善の解決策はオプションを使用することだと思いますdialogClass

jquery UIドキュメントからの抜粋:

初期化中: $('.selector').dialog({ dialogClass: 'noTitleStuff' });

または、初期化後に必要な場合。:

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

だから私はオプションdialogClass = 'noTitleStuff'とそのようなcssでいくつかのダイアログを作成しました:

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

単純すぎます !!しかし、以前のid-> classドリルメソッドが機能しなかった理由を考えるのに1日かかりました。実際、.dialog()メソッドを呼び出すと、変換するdivが別のdiv(実際のダイアログdiv)の子になり、おそらくdivの「兄弟」になるtitlebarため、前者から始めて後者を見つけるのは非常に困難です。


2
+1ジョナタンの解決策は特定のダイアログでは機能しません。あなたのします。
cetnar

1
私はミザーに同意します。これにより、定義したクラスのみを持つダイアログボックスに固有にすることができるため、これが最良のソリューションです。
Carlos Pinto

2
このメソッドの唯一の欠点は、モーダルとして構成されている場合、Chromeがそのようなダイアログに垂直スクロールバーを追加することです。これは、どういうわけかjQueryがui-widget-overlayの高さを誤って計算し始めるためです...私はより深く掘り出さず、ハック{オーバーフロー:隠し}以外のクイックフィックスは見つかりません
dimsuz

1
dialogClassはjquery v 1.12では非推奨であり、意図したとおりにダイアログオブジェクトに影響を与えません。
ミニ冷蔵庫2016年

1
ui-dialogプロパティを使用して、classesオプションを優先してdialogClassオプションを非推奨にしました。
Sandeep

96

タイトルバーを動的に削除するための修正を見つけました。

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

これにより、ダイアログボックスがレンダリングされた後、クラスが 'ui-dialog-titlebar'のすべての要素が削除されます。


3
...そしてcssオプションは、それらが前に現れる可能性を削除します。私はあなたの選択肢に何らかの利益があるとは思いません。実際には、あなたの代わりは私がしたことをするつもりで、余分なステップを追加するだけです。CSS-Routeを使用すると高速になります。
サンプソン

10
まあ私のオプションは、この1つのダイアログのタイトルバーのみを削除します。あなたのオプションを使用した場合、すべてのダイアログのタイトルバーを削除します。将来、タイトルバーが必要になることがわかります。
Loony2nz 2009年

2
したがって、css-rule:内に要素を含めます#example .ui-dialog-titlebar...。どちらの方法でも機能します。しかし、Javascriptは最終的にCSSを設定する予定であるため、そもそもCSSで設定しないことのメリットはわかりません。それは本当に大きな違いはありません-あなたが最も快適なものは何でも:)
サンプソン

2
それは私だけですか、それとも#exampleにはダイアログタイトルのスコープがありませんか?
リオ

2
@米粉クッキー:.hide()は.dialog()の後に来る必要があります。これは、.dialog()がダイアログのマークアップをページに挿入するためです。その呼び出しの前は、ページにはまだダイアログ要素がありません。
ジェレミーウィーベ

62

CSSで非表示にできると思います。

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

または、次のdialogClassオプションを使用して、これを特定のダイアログに適用できます。

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

テーマ設定」ダイアログを確認してください。上記の提案はdialogClassオプションを利用していますが、これは新しい方法を支持するための方法であると思われます。


はい、それはうまくいくと思いますが、それはグローバルなオプションです。オプションでそれを行う方法があるのか​​と思っていました。タイトルdivが表示される前に削除するために、レンダリング前のjqueryを実行できると思います。
Loony2nz 2009年

2
いいえ、削除するオプションがあるとは思いません。デフォルトでは閉じるボタンなので、ある意味でほとんどデザインが悪いです。
サンプソン

3
人々がcssについて語りすぎると、彼らはおかしな話をしませんか
bobobobo

また、その後ダイアログを移動できなくなるため、おそらく削除しないでください。おそらくテキストを入れずにスタイルを変更して、暗くて薄くすることをお
勧めします

ダイアログのcloseメソッドをトリガーする他のイベントがある場合、タイトルバーの閉じるボタンが不要な場合があります。
Carlos Pinto

55

私はこれを自分のプロジェクトで使用しています

$("#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
さらに良い:タイトルバーを削除しますが、閉じるボタンは削除しません。その機能を維持します。$(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();私の意見では、このコード行に対する+1が最良の答えです。
Jaylen

または、前の兄弟、つまりタイトルバー.ui-dialog-titlebar:$("#myDialog").prev().hide()またはを探すこともできます$("#myDialog").prev(".ui-dialog-titlebar").hide()
Andrew

2つのdivがあり、1つだけを非表示にしたかったため、賛成票を投じてください。
Marcus Becker

15

これは私のために働きました:

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

1
これにより、すべてのダイアログのヘッダーが非表示になります。以下の提案(次の返信)は、現在開いているダイアログに対してのみ行います。
ingredient_15939

いいですね...これは、基本のcssクラスのためにすべてのダイアログを非表示にする必要がないことを意味します...また、ダイアログを個別に設定してタイトルを削除する必要がないことも意味します。
グワショッパ2016

8

使ってみてください

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

これにより、すべてのダイアログのタイトルが非表示になります

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

7

実際には、ダイアログをwidget直接使用する別の方法があります。

このようにしてダイアログウィジェットを取得できます

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

そして次に

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

titlebarそのダイアログ内のみを非表示にする

そして、1行のコードで(私は連鎖が好きです):

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

この方法でダイアログに追加のクラスを追加する必要はありません。直接それに行くだけです。私にとってはうまくいきます。


5

openイベントを使用し、そこからタイトルバーを非表示にする方が、より効率的で読みやすくなっています。ページグローバルクラス名検索を使用するのは好きではありません。

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

シンプル。


2
これは私が使った方法ですが、ダイアログが表示されるときだけでなく、常に非表示になるようにcreate:関数を使用しました。また、ダイアログから完全に削除されるように、.hide()ではなく.remove()に変更しました。
Chris Porter

4

ダイアログの初期化時にdialogClassを使用した後、jqueryを使用してタイトルバーを非表示にすることができます。

初期化中:

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

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

この方法を使用すると、CSSファイルを変更する必要がなく、これも動的です。


1
はい、これはmizarのソリューションでした-あなたの6か月前に投稿されました。
カークウォル

同意しますが、CSSエントリも追加する必要があるため、ソリューションが複雑になります。私の提案は、jQueryのみを使用して問題を処理します。
Arun Vasudevan Nair 2017

4

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

タイトルバーを表示するかどうかを設定できます

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

4

複数のダイアログがある場合は、これを使用できます。

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

3

これが最も簡単な方法であり、特定のダイアログのタイトルバーのみが削除されます。

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

2

ダイアログのタイトルバーを非表示にしたときに私が発見したことの1つは、表示が何もない場合でも、スクリーンリーダーがそれを取得して読み上げることです。独自のタイトルバーを既に追加している場合は、両方が表示され、混乱を招きます。

私がしたことはを使用してDOMから削除されました$(selector).remove()。これで、スクリーンリーダー(および他のすべての人)は存在しなくなったため、スクリーンリーダーに表示されなくなります。


2

これを試して

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

divid対応するものに置き換えるid


2

この次のフォームで問題が解決しました。

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

これは、ダイアログボックスのタイトルバーを非表示にするのに役立ちました。

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

1

これは、それを行う方法です。

テーマフォルダーに移動します->ベース-> jquery.ui.dialog.cssを開きます

探す

フォロー

titleBarを表示したくない場合は、次のように単にdisplay:noneを設定します。

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

タイトルも同様。

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

ここで閉じるボタンが表示されます。これを設定しないか、設定することもできます

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

}

私はたくさんの検索をしましたが、それでも何も考えませんでした。ただし、これはアプリケーション全体に影響を及ぼし、ダイアログのタイトルボタン、閉じるボタンがありませんが、jqueryを使用し、jqueryを介してCSSを追加および設定することで、これを克服することもできます。

これはこれの構文です

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

1
これは機能し、これを実行できることを理解するのに役立ちますが、.dialogs()これらの設定が1つだけ必要な場合は、この方法で設定をグローバルに適用する以外の代替ルートがあります。
Chef_Code

0

私にとっては、サイズ変更可能なコーナーを使用したかったので、斜めの線を確認しました。使った

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

間違った質問にコメントしていることに気づきました。私の同名:(



-1

上記の方法で閉じるアイコンのあるバーを削除してから、自分で閉じるアイコンを追加できます。

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

//このdivをコンテンツを保持するdivに追加します

JS:

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

-1

jquery-ui.js(私の場合はjquery-ui-1.10.3.custom.js)に移動して、this._createTitlebar();を検索します。コメントしてください。

これで、ダイアログの誰もがヘッダー付きで表示されます。ヘッダーをカスタマイズする場合は、_createTitlebar();に移動します。内部のコードを編集します。

沿って


そのような変更を行うと、アップグレードに大きな痛みが生じます。
usr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.