กล่องโต้ตอบ jquery UI: วิธีการเริ่มต้นโดยไม่มีแถบชื่อ?


คำตอบ:


289

dialogClassผมคิดว่าทางออกที่ดีที่สุดคือการใช้ตัวเลือก

สารสกัดจากเอกสาร jquery UI:

ในช่วง init: $('.selector').dialog({ dialogClass: 'noTitleStuff' });

หรือถ้าคุณต้องการหลังจาก init :

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

ดังนั้นฉันจึงสร้างกล่องโต้ตอบด้วย option dialogClass = 'noTitleStuff' และ css เช่นนั้น:

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

ง่ายเกินไป !! แต่ฉันใช้เวลา 1 วันคิดว่าทำไมวิธีการเจาะระดับ id-> ระดับก่อนหน้าของฉันไม่ทำงาน ในความเป็นจริงเมื่อคุณเรียก.dialog()เมธอด div ที่คุณเปลี่ยนกลายเป็นลูกของ div อื่น (div ไดอะล็อกจริง) และอาจเป็น 'พี่ชาย' ของtitlebardiv ดังนั้นจึงเป็นเรื่องยากมากที่จะลองค้นหาอันหลังที่เริ่มจากอดีต


2
+1 โซลูชันของ Jonatan ไม่สามารถใช้กับการโต้ตอบพิเศษ ของคุณทำ
cetnar

1
ฉันเห็นด้วยกับ mizar นี่คือทางออกที่ดีที่สุดเนื่องจากความจริงที่ว่าสิ่งนี้ช่วยให้คุณสามารถระบุเฉพาะกับกล่องโต้ตอบที่มีคลาสที่คุณกำหนดไว้เท่านั้น
Carlos Pinto

2
ข้อเสียเพียงอย่างเดียวของวิธีนี้คือ Chrome เพิ่มแถบเลื่อนแนวตั้งสำหรับกล่องโต้ตอบดังกล่าวเมื่อมีการกำหนดค่าเป็นกิริยาเนื่องจาก jQuery เริ่มคำนวณความสูงของ ui-widget-overlay อย่างไม่ถูกต้อง ... ฉันไม่ขุดลึกลงไปอีก พบการแก้ไขที่รวดเร็วนอกเหนือจากการแฮ็ค {ล้น: ซ่อน}
dimsuz

1
dialogClass เลิกใช้แล้วใน jquery v 1.12 และจะไม่มีผลกับวัตถุไดอะล็อกตามที่ต้องการ
ตู้เย็นขนาดเล็ก

1
ตัวเลือก dialogClass ได้รับการคัดค้านตัวเลือกคลาสโดยใช้คุณสมบัติ ui-dialog
Sandeep Saroha

96

ฉันพบวิธีแก้ไขสำหรับการลบแถบหัวเรื่องแบบไดนามิก

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

สิ่งนี้จะลบองค์ประกอบทั้งหมดด้วยคลาส 'ui-dialog-titlebar' หลังจากแสดงกล่องโต้ตอบ


3
... และตัวเลือก css จะลบโอกาสที่จะเกิดขึ้นก่อนหน้านี้ ฉันไม่แน่ใจว่าฉันเห็นประโยชน์ใด ๆ ในทางเลือกของคุณ ในความเป็นจริงทางเลือกของคุณกำลังจะทำในสิ่งที่ฉันทำเพียงแค่เพิ่มขั้นตอนพิเศษ การใช้ CSS-Route จะเร็วขึ้น
Sampson

10
ตัวเลือกของฉันจะลบแถบชื่อเรื่องสำหรับกล่องโต้ตอบนี้เท่านั้น หากฉันใช้ตัวเลือกของคุณฉันจะลบแถบชื่อเรื่องสำหรับกล่องโต้ตอบทั้งหมดของฉัน ฉันสามารถเห็นได้ในอนาคตว่าฉันจะต้องมีแถบชื่อเรื่อง
Loony2nz

2
ดังนั้นคุณจึงมีองค์ประกอบของคุณภายใน CSS #example .ui-dialog-titlebar...กฎ: มันจะทำงานด้วยวิธีใด; แต่ Javascript กำลังจะตั้ง css ในที่สุดดังนั้นฉันไม่เห็นประโยชน์ของการไม่ทำมันใน css เพื่อเริ่มต้นด้วย จริงๆมันไม่ให้มากความแตกต่าง - สิ่งที่คุณมีความสะดวกสบายมากที่สุดด้วย :)
จอห์น

2
เป็นเพียงฉันหรือตัวอย่าง # ไม่มีขอบเขตเหนือชื่อโต้ตอบหรือไม่
Rio

2
@ แป้งแป้งคุกกี้:. leather () ต้องมาหลังจาก. diog () เพราะ. diog () เป็นสิ่งที่แทรกมาร์กอัปสำหรับกล่องโต้ตอบลงในหน้า ก่อนหน้าการโทรนั้นเพจยังไม่มีองค์ประกอบการโต้ตอบใด ๆ
Jeremy Wiebe

62

ฉันเชื่อว่าคุณสามารถซ่อนมันได้ด้วย CSS:

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

หรือคุณสามารถใช้สิ่งนี้กับกล่องโต้ตอบเฉพาะด้วยdialogClassตัวเลือก:

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

ตรวจสอบ " ชุดรูปแบบ " กล่องโต้ตอบ คำแนะนำข้างต้นใช้ประโยชน์จากdialogClassตัวเลือกซึ่งดูเหมือนจะเป็นไปตามวิธีการใหม่


ใช่ฉันเดาว่ามันจะใช้ได้ แต่เป็นตัวเลือกระดับโลก ฉันสงสัยว่ามีวิธีที่จะทำกับตัวเลือก ฉันเดาว่าฉันสามารถ jquery'ness ก่อนการแสดงผลเพื่อลบ div ชื่อก่อนที่จะแสดง
Loony2nz

2
ไม่ฉันไม่เชื่อว่ามีตัวเลือกในการลบ โดยปกติแล้วมันคือปุ่มปิดดังนั้นในความรู้สึกมันเกือบจะออกแบบไม่ดี
Sampson

3
เมื่อผู้คนพูดคุยกันเกี่ยวกับ CSS มากเกินไปพวกเขาจะสะกดตลกไม่ได้เลย
bobobobo

นอกจากนี้คุณอาจไม่ควรลบออกเนื่องจากคุณไม่สามารถย้ายกล่องโต้ตอบอีกต่อไปหลังจากนั้น น่าจะดีกว่าที่จะไม่ใส่ข้อความลงไปและพักมันดังนั้นมันจึงมืดและผอม
bobobobo

หากคุณมีเหตุการณ์อื่นที่ก่อให้เกิดวิธีการปิดของกล่องโต้ตอบอาจมีกรณีที่คุณไม่ต้องการปุ่มปิดบนแถบชื่อเรื่อง
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
ดียิ่งขึ้น: ลบ titlebar แต่ไม่ใช่ปุ่มปิด รักษาการทำงานของมันไว้ $(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-โต้ตอบแถบหัวเรื่อง: หรือ$("#myDialog").prev().hide() $("#myDialog").prev(".ui-dialog-titlebar").hide()
Andrew

ขึ้นคะแนนเพราะฉันมีสอง divs และฉันต้องการซ่อนเพียงหนึ่ง
Marcus Becker

15

สิ่งนี้ใช้ได้กับฉัน:

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

1
นี่จะซ่อนส่วนหัวในกล่องโต้ตอบทั้งหมด คำแนะนำของฉันด้านล่าง (ตอบกลับถัดไป) จะทำเพียงสำหรับกล่องโต้ตอบการเปิดในปัจจุบัน
ingredients_15939

ดี ... นี่หมายความว่าฉันไม่จำเป็นต้องซ่อนทุกกล่องโต้ตอบเนื่องจากคลาส css พื้นฐาน ... ยังหมายความว่าฉันไม่จำเป็นต้องตั้งค่ากล่องโต้ตอบแยกต่างหากจากนั้นจึงลบชื่อ
Gwasshoppa

8

ลองใช้

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

การดำเนินการนี้จะซ่อนหัวเรื่องของกล่องโต้ตอบทั้งหมด

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

7

ที่จริงแล้วยังมีวิธีอื่นอีกวิธีหนึ่งโดยใช้กล่องโต้ตอบwidgetโดยตรง:

คุณสามารถรับ Dialog Widget ได้

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

แล้วทำ

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

เพื่อซ่อนtitlebarภายในกล่องโต้ตอบนั้นเท่านั้น

และในรหัสบรรทัดเดียว (ฉันชอบการผูกมัด):

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

ไม่จำเป็นต้องเพิ่มคลาสพิเศษลงในกล่องโต้ตอบด้วยวิธีนี้เพียงไปที่คลาสโดยตรง ทำงานได้ดีสำหรับฉัน


5

ฉันพบว่ามีประสิทธิภาพมากขึ้นและสามารถอ่านได้มากขึ้นเพื่อใช้กิจกรรมเปิดและซ่อนแถบหัวเรื่องจากที่นั่น ฉันไม่ชอบใช้การค้นหาชื่อคลาสเพจระดับโลก

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

ง่าย


2
นี่เป็นวิธีที่ฉันใช้ แต่ใช้ฟังก์ชัน create: เพื่อให้มันถูกซ่อนอยู่เสมอไม่ใช่แค่เมื่อไดอะล็อกปรากฏขึ้น ฉันยังเปลี่ยนเป็น. Remove () แทนที่จะเป็น. leather () เพื่อให้แน่ใจว่าหายไปจากกล่องโต้ตอบโดยสมบูรณ์
Chris Porter

4

คุณสามารถใช้ jquery เพื่อซ่อนแถบหัวเรื่องหลังจากใช้ dialogClass เมื่อเริ่มต้นการโต้ตอบ

ในช่วง init:

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

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

เมื่อใช้วิธีนี้คุณไม่จำเป็นต้องเปลี่ยนไฟล์ css และเป็นแบบไดนามิกเช่นกัน


1
ใช่นี่เป็นวิธีแก้ปัญหาของ mizar - โพสต์ 6 เดือนก่อนคุณ
Kirk Woll

ฉันเห็นด้วย แต่จากนั้นคุณจะต้องเพิ่มรายการ CSS ซึ่งทำให้การแก้ปัญหายุ่งยากขึ้น ข้อเสนอแนะของฉันจะดูแลปัญหาโดยใช้ jQuery เท่านั้น
อรุณ Vasudevan แนร์

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

สิ่งหนึ่งที่ฉันค้นพบเมื่อซ่อนแถบหัวเรื่องของกล่องโต้ตอบคือแม้ว่าจอแสดงผลจะไม่มีก็ตามโปรแกรมอ่านหน้าจอก็ยังรับมันและจะอ่าน หากคุณเพิ่มแถบชื่อเรื่องของคุณเองแล้วมันจะอ่านทั้งคู่ทำให้เกิดความสับสน

สิ่งที่ฉันได้ถูกลบออกจาก DOM $(selector).remove()โดยใช้ ตอนนี้โปรแกรมอ่านหน้าจอ (และทุก ๆ เครื่อง) จะไม่เห็นเนื่องจากไม่มีอีกต่อไป



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

ฉันคิดว่าวิธีที่สะอาดที่สุดในการทำคือสร้างวิดเจ็ต myDialog ใหม่ซึ่งประกอบด้วยวิดเจ็ตการโต้ตอบลบด้วยบาร์โค้ดหัวเรื่อง การทำให้บาร์โค้ดชื่อเรื่องดูเรียบง่าย

https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.dialog.js


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

Samilarly สำหรับชื่อเช่นกัน

.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 และเพิ่มและตั้งค่า css ผ่าน jquery

นี่คือไวยากรณ์สำหรับสิ่งนี้

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

1
วิธีนี้ใช้งานได้และเป็นประโยชน์ในการทำความเข้าใจว่าสามารถทำได้ แต่ถ้าคุณมีหลาย.dialogs()และเพียง 1 หรือมากกว่านั้นต้องการการตั้งค่าเหล่านี้แสดงว่ามีเส้นทางอื่นมากกว่าการใช้การตั้งค่าทั่วโลกด้วยวิธีนี้
Chef_Code

0

สำหรับฉันฉันยังต้องการใช้มุมที่ปรับขนาดได้ใหม่ แต่ไม่ต้องการเห็นเส้นทแยงมุม ฉันใช้

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

เพิ่งรู้ว่าฉันกำลังแสดงความคิดเห็นในคำถามที่ผิด ใช้ชีวิตตามชื่อของฉัน :(



-1

คุณสามารถลบบาร์ที่มีไอคอนปิดพร้อมกับ techinques ที่อธิบายไว้ข้างต้นแล้วเพิ่มไอคอนปิดด้วยตัวคุณเอง

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.