jquery UI iletişim kutusu: başlık çubuğu olmadan nasıl başlatılır?


254

Başlık çubuğu olmadan bir jQuery UI İletişim Kutusu açmak mümkün müdür?

Yanıtlar:


289

Bence en iyi çözüm seçeneği kullanmak dialogClass.

Jquery UI dokümanlarından bir alıntı:

init sırasında: $('.selector').dialog({ dialogClass: 'noTitleStuff' });

ya da init sonra istiyorum. :

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

Bu nedenle, dialogClass = 'noTitleStuff' ve css gibi bazı iletişim kutuları yarattım:

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

çok basit !! ama önceki id-> class delme yöntemimin neden çalışmadığını düşünmek için 1 günümü aldım. Aslında .dialog()div yöntemini çağırdığınızda , dönüştürdüğünüz başka bir div (gerçek diyalog div) ve muhtemelen div'ın bir 'kardeşi' çocuğu olur titlebar, bu yüzden ikincisini başlangıçtan başlayarak bulmak çok zordur.


2
+1 Jonatan'ın çözümü belirli bir diyalog için çalışmıyor. Sizinkiler.
cetnar

1
Mizar'a katılıyorum. Bu, yalnızca tanımladığınız sınıfa sahip olan iletişim kutularına özgü olmanıza izin verdiği için en iyi çözümdür.
Carlos Pinto

2
bu yöntemin tek dezavantajı, Chrome'un modal olarak yapılandırıldığında böyle bir iletişim kutusu için dikey bir kaydırma çubuğu eklemesidir, çünkü jQuery bir şekilde ui-widget-overlay yüksekliğini yanlış hesaplamaya başlar ... Daha derine inmedim ve yapmadım hacky dışında hızlı bir düzeltme bulamıyorum {taşma: gizli}
dimsuz

1
dialogClass jquery v 1.12'de kullanımdan kaldırılmıştır ve iletişim kutusu nesnesini amaçlandığı şekilde etkilemez.
Mini Buzdolabı

1
DialogClass seçeneği, ui-dialog özelliği kullanılarak sınıflar lehine kullanımdan kaldırılmıştır.
Sandeep Saroha

96

Başlık çubuğunu dinamik olarak kaldırmak için bir düzeltme buldum.

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

Bu, iletişim kutusu oluşturulduktan sonra 'ui-dialog-titlebar' sınıfındaki tüm öğeleri kaldıracaktır.


3
... ve css seçeneği daha önce görünme şanslarını ortadan kaldırır. Alternatifinizde herhangi bir fayda gördüğümden emin değilim. Gerçekte, alternatifiniz yaptığım şeyi yapacak, sadece fazladan bir adım ekleyecek. CSS Güzergahına gitmek daha hızlı olacaktır.
Sampson

10
Benim seçeneğim sadece bu iletişim kutusunun başlık çubuğunu kaldıracak. Seçeneklerinizi kullansaydım, tüm diyaloglarım için başlık çubuğunu kaldırırdım. Gelecekte bir başlık çubuğuna ihtiyacım olacağını görebiliyorum.
Loony2nz

2
Yani css-kural içinde eleman içerir: #example .ui-dialog-titlebar.... Her iki şekilde de çalışır; ama Javascript sonunda css ayarlayacak, bu yüzden başlamak için css bunu yapmanın yararı görmüyorum. Gerçekten çok fazla bir fark yaratmıyor - en rahatınız ne olursa olsun :)
Sampson

2
Sadece ben miyim yoksa #example iletişim kutusunun kapsamı dışında mı?
Rio

2
@Rice Un Çerezleri: .hide () öğesinin .dialog () öğesinden sonra gelmesi gerekir, çünkü .dialog () iletişim kutusunun işaretlemesini sayfaya enjekte eden şeydir. Aramadan önce sayfanın henüz iletişim öğesi yok.
Jeremy Wiebe

62

CSS ile gizleyebileceğinizi düşünüyorum:

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

Alternatif olarak, aşağıdaki dialogClassseçenekle belirli iletişim kutularına uygulayabilirsiniz :

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

İletişim Kutusunu " Temanın " bölümüne bakın. Yukarıdaki öneri, yeni bir yöntem lehine çıkmış gibidialogClass görünen seçeneği kullanıyor .


Evet sanırım bu işe yarar, ama bu küresel bir seçenek. Seçeneklerle yapmanın bir yolu olup olmadığını merak ediyordum. Sanırım gösterilmeden önce başlık div kaldırmak için bazı ön işleme jquery'ness yapabilirsiniz.
Loony2nz

2
Hayır. Kaldırmak için bir seçenek olduğuna inanmıyorum. Varsayılan olarak kapat düğmesi, bu yüzden bir anlamda neredeyse kötü tasarım.
Sampson

3
İnsanlar css hakkında çok fazla konuştuklarında, büyülüyorlar, değil mi
bobobobo

Ayrıca bundan sonra iletişim kutusunu taşıyamayacağınız için muhtemelen kaldırmamalısınız. Muhtemelen daha iyi bir metin koymak ve karanlık ve ince olduğunu yeniden
restyle

İletişim kutusunun kapatma yöntemini tetikleyen başka bir etkinliğiniz varsa, başlık çubuğunda kapat düğmesine ihtiyaç duymadığınız durumlar olabilir.
Carlos Pinto

55

Bunu projelerimde kullanıyorum

$("#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
Daha da iyisi: başlık çubuğunu kaldır ancak kapat düğmesini kaldır. İşlevselliğini koruyun. $(document).ready(function() { $('#video').click(function(){ $( "#dialog" ).dialog().siblings('.ui-dialog-titlebar').removeClass('ui-widget-header'); }); });
Adrian

$("#myDialog").dialog('open').siblings('.ui-dialog-titlebar').remove();Kanımca bu kod satırı için +1 en iyi cevaptır
Jaylen

Ya da sadece başlık çubuğu olan önceki kardeşi arayabilirsiniz: .ui-dialog-titlebar: $("#myDialog").prev().hide()veya $("#myDialog").prev(".ui-dialog-titlebar").hide().
Andrew

Yukarı oy çünkü iki div var ve sadece bir gizlemek istedim.
Marcus Becker

15

Bu benim için çalıştı:

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

1
Bu, tüm iletişim kutularındaki başlıkları gizler . Aşağıdaki önerim (bir sonraki yanıt), yalnızca şu anda açılan iletişim kutusu için yapacağım.
ingredient_15939

Güzel ... Bu, temel css sınıfı nedeniyle her iletişim kutusunu gizli yapmak zorunda olmadığım anlamına gelir ... ayrıca iletişim kutumu ayrı olarak ayarlayıp başlığı kaldırmak zorunda olmadığım anlamına gelir.
Gwasshoppa

8

Kullanmayı deneyin

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

Bu, tüm iletişim kutularının başlıklarını gizler

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

7

Aslında, iletişim kutusunu widgetdoğrudan kullanarak başka bir yol daha var :

İletişim Pencere Öğesi'ni bu şekilde alabilirsiniz.

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

ve sonra yap

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

titlebaryalnızca o iletişim kutusunun içinde gizlemek için

ve kod tek bir satırda (zincirleme gibi):

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

Diyaloga bu şekilde ekstra bir sınıf eklemenize gerek yok, sadece doğrudan gidin. Benim için iyi çalışıyor.


5

Ben daha verimli ve daha okunabilir, kullanımı bulmak açık olayı ve oradan başlık çubuğunu gizlemek. Sayfa-global sınıf adı aramalarını kullanmayı sevmiyorum.

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

Basit.


2
Bu, gittiğim ancak create: işlevini kullandığım yöntemdi, böylece yalnızca iletişim kutusu gösterildiğinde değil, her zaman gizlidir. Ayrıca iletişim kutusundan tamamen gittiğinden emin olmak için .hide () yerine .remove () olarak değiştirdim.
Chris Porter

4

İletişim kutusunu başlatırken dialogClass kullandıktan sonra başlık çubuğunu gizlemek için jquery kullanabilirsiniz.

init sırasında:

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

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

Bu yöntemi kullanarak, css dosyanızı değiştirmeniz gerekmez ve bu da dinamiktir.


1
Evet, bu mizar'ın çözümüydü - sizden 6 ay önce gönderildi.
Kirk Woll

Kabul ediyorum, ancak daha sonra çözümü karmaşıklaştıran bir CSS girişi eklemeniz gerekecek. Benim önerim sadece jQuery kullanarak sorunu halleder.
Arun Vasudevan Nair

4

JQuery widget'larını geçersiz kılmayı seviyorum.

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

Artık başlık çubuğunu göstermek isteyip istemediğinizi ayarlayabilirsiniz

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

4

Birden fazla iletişim kutunuz varsa, bunu kullanabilirsiniz:

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

3

Bu, bunu yapmanın en kolay yoludur ve yalnızca belirli bir iletişim kutusundaki başlık çubuğunu kaldırır;

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

2

İletişim Kutusu başlık çubuğunu gizlerken keşfettiğim tek şey, ekran hiçbiri olmasa bile, ekran okuyucular hala onu alıp okuyacak olmasıdır. Kendi başlık çubuğunuzu zaten eklediyseniz, her ikisini de okuyarak karışıklığa neden olur.

Ne yaptığımı kullanarak DOM kaldırıldı $(selector).remove(). Artık ekran okuyucuları (ve diğer her biri) artık görünmeyeceği için bunu görmeyecek.


2

Bunu dene

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

dividkarşılık gelen ile değiştirid


2

Bu sonraki form bana sorunu çözdü.

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

Bu, iletişim kutusu başlık çubuğunu gizlemem için işe yaradı:

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

1

Bu nasıl yapılabilir.

Temalar klasörüne gidin -> base -> open jquery.ui.dialog.css

bulmak

Aşağıdakilerden

titleBar'ı görüntülemek istemiyorsanız, display: none'ı aşağıdaki gibi yaptığım gibi ayarlayın.

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

Samilarly de unvan için.

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

Şimdi kapat düğmesi geliyor da hiçbirini ayarlayabilirsiniz veya ayarlayabilirsiniz

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

}

Çok fazla arama yaptım ama o zaman aklımda bu fikri aldım. Ancak bu, tüm uygulamanın kapatma düğmesi, iletişim kutusu başlık çubuğu içermemesine neden olur, ancak jquery kullanarak ve jquery üzerinden css ekleyip ayarlayarak bunun üstesinden gelebilirsiniz.

işte bunun için sözdizimi

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

1
Bu işe yarar .dialogs()ve bunun yapılabileceğini anlamaya yardımcı olur, ancak bu ayarlara birden fazla ve sadece 1 veya daha fazlasına ihtiyacınız varsa, ayarları global olarak bu şekilde uygulamaktan başka alternatif yollar vardır.
Chef_Code

0

Benim için hala yeniden boyutlandırılabilir köşeleri kullanmak istedim, sadece çapraz çizgileri görmek istemedim. kullandım

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

Sadece yanlış soruya yorum yaptığımı fark ettim. Benim adıma yaşarken :(



-1

Kapat simgesiyle çubuğu yukarıda açıklanan tekniklerle kaldırabilir ve ardından kendiniz bir kapatma simgesi ekleyebilirsiniz.

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

// bu div'i içeriğinizi tutan div'e ekleyin

JS:

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

-1

jquery-ui.js (benim durumumda jquery-ui-1.10.3.custom.js) adresine gidin ve this._createTitlebar () öğesini arayın; ve yorum yapın.

şimdi herhangi birinin iletişim kutusu başlıklarla birlikte görünecektir. Başlığı özelleştirmek istiyorsanız _createTitlebar () öğesine gidin; ve içindeki kodu düzenleyin.

tarafından


Bunun gibi değişiklikler yapmak korkunç bir yükseltme ağrısına neden olur.
usr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.