วิธีลบปุ่มปิดบนกล่องโต้ตอบ jQuery UI


775

ฉันจะลบปุ่มปิด ( Xที่มุมขวาบน) ในกล่องโต้ตอบที่สร้างโดย jQuery UI ได้อย่างไร


11
ตรวจสอบเอกสารชื่อย่อยแรก: api.jqueryui.com/dialog
Mike Cole

1
@MikeCole เอกสารนี้ใช้สำหรับ 1.10 - ฉันคิดว่าถ้าคุณต้องการซ่อนปุ่มปิดในรุ่นที่ต่ำกว่าคุณจะต้องทำอะไรบางอย่างเช่นคำตอบด้านล่าง
Jarrett

1
ใช้ "ui-dialog-titlebar-close": "display: none;" เมื่อเราตั้งค่าไดอะล็อก jqueryui modal
MarcoZen

คำตอบ:


711

ฉันได้พบสิ่งนี้ใช้งานได้ในตอนท้าย (โปรดสังเกตบรรทัดที่สามที่แทนที่ฟังก์ชั่นเปิดซึ่งค้นหาปุ่มและซ่อนไว้):

$("#div2").dialog({
    closeOnEscape: false,
    open: function(event, ui) {
        $(".ui-dialog-titlebar-close", ui.dialog || ui).hide();
    }
});

เพื่อซ่อนปุ่มปิดในกล่องโต้ตอบทั้งหมดคุณสามารถใช้ CSS ต่อไปนี้ได้เช่นกัน:

.ui-dialog-titlebar-close {
    visibility: hidden;
}

121
$(".ui-dialog-titlebar-close", ui).hide();เพื่อซ่อนปุ่มสำหรับกล่องโต้ตอบนี้เท่านั้น
Anthony Serdyukov

67
ฉันไม่สามารถใช้พารามิเตอร์ ui ได้ ฉันลงเอยด้วยการใช้: $ (". ui-dialog-titlebar-close", $ (this) .parent ()). hide ();
Nigel

70
@ แอนตันเพียงต้องการชี้ให้เห็นว่าเพียงแค่ระบุ 'ui' ไม่ทำงาน คุณต้องใช้ 'ui.dialog' ดังนั้นบรรทัดที่ถูกต้องจะเป็น $ (". ui-dialog-titlebar-close", ui.dialog) .hide ();
Bradley Mountford

22
@Bradley ui ไม่ทำงานสำหรับฉัน ui.dialog ทำ แต่ใช้กับแต่ละอินสแตนซ์ หากต้องการให้ ot ทำงานนำไปใช้กับฟังก์ชันที่กำหนดไว้เท่านั้นฉันต้องทำสิ่งนี้: $ (". ui-dialog-titlebar-close", this.parentNode) .hide ();
Nabab

12
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
opengrid

361

นี่คืออีกทางเลือกหนึ่งเพียงแค่ใช้ CSS ที่ไม่เกินการโต้ตอบทุกครั้งในหน้า

CSS

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

HTML

<div class="selector" title="No close button">
    This is a test without a close button
</div>

จาวาสคริปต์

$( ".selector" ).dialog({ dialogClass: 'no-close' });

ตัวอย่างการทำงาน


6
ฉันชอบวิธีการนี้เพราะฉันสามารถใช้ร่วมกับสิ่งต่าง ๆ เช่น: .noTitleDlg .ui-dialog-titlebar {display: none} ใน CSS เพื่อสร้างวิธีที่ฉันต้องการให้กล่องโต้ตอบปรากฏและทำงานจากนั้นตั้งค่า dialogClass ตามลำดับ
A. Murray

11
วิธีแก้ปัญหาที่สะอาดมาก ... +1 สำหรับการไม่เกี่ยวข้องกับฟังก์ชั่น js เพิ่มเติมเพื่อลบปุ่ม
Bongs

2
ความคิดที่ดี. มีประโยชน์ในการกำหนดเป้าหมายกล่องโต้ตอบเฉพาะในสถานการณ์ที่คุณใช้วิธีการเปิดที่เหมือนกันสำหรับกล่องโต้ตอบทั้งหมดและมันไม่สะดวกในการเปลี่ยนสำหรับกล่องโต้ตอบที่เฉพาะเจาะจง
ZolaKt

3
ทางออกที่ฉันชอบ ฉันคิดว่าสิ่งนี้จะเป็นวิธีที่ดีที่สุด ขอขอบคุณที่เขียนรหัสที่นี่แล้ว เมื่อสร้างสิ่งนี้ฉันชอบที่จะใช้การเปลี่ยนแปลงนี้ซึ่งจะใช้แอตทริบิวต์ class ของ div เนื้อหาของไดอะล็อกซึ่งฉันสามารถวางคลาส "no-close":dialogClass : $("#my-dialog-id").attr("class"),
LS

วิธีแก้ปัญหานี้อนุญาตให้ปิดด้วยการหลบหนีหากคุณต้องการป้องกันการปิดเมื่อใช้งานการหลบหนี:$( ".selector" ).dialog({ dialogClass: 'no-close' , closeOnEscape: false,});
Mladen Adamovic

124

คำตอบ "ดีที่สุด" จะไม่ดีสำหรับการสนทนาหลายครั้ง นี่คือทางออกที่ดีกว่า

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

23
มันซับซ้อนกว่าที่คุณต้องการ $(".ui-dialog-titlebar-close", $(this).parent()).hide();
Kevin Panko

@KevinPanko ข้อเสนอแนะของคุณทำงานได้ดีเมื่อใช้ตัวอย่างที่จัดทำโดยไซต์ตัวอย่าง jquery ui ด้วย ASP.NET v2.0 ในหน้า. aspx jqueryui.com/demos/dialog/modal-form.html
Matthew Dally

6
.closest ('. ui-dialog') ดีกว่าสมมติว่าผู้ปกครอง
technomage

86

คุณสามารถใช้ CSS เพื่อซ่อนปุ่มปิดแทน JavaScript:

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

หากคุณไม่ต้องการที่จะส่งผลกระทบต่อการปรับเปลี่ยนทั้งหมดคุณสามารถใช้กฎเช่น

.hide-close-btn .ui-dialog-titlebar-close{
    display: none;
}

และนำ.hide-close-btnไปใช้กับโหนดบนสุดของการโต้ตอบ


3
คำตอบนี้ง่ายและตรงไปตรงมา อย่างไรก็ตามจะมีผลก็ต่อเมื่อคุณต้องการปิดใช้งานปุ่มสำหรับกล่องโต้ตอบทั้งหมด
Mark Brittingham

@MarkBrittingham คุณสามารถใช้คลาส CSS ที่กำหนดเองกับโมดอลและตัวเลือกของคุณจากนั้นสิ่งนี้จะนำไปใช้กับผู้ที่คุณต้องการ
Juan Mendes

48

ตามที่ปรากฏในหน้าอย่างเป็นทางการและแนะนำโดยเดวิด:

สร้างสไตล์:

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

จากนั้นคุณสามารถเพิ่มคลาสที่ไม่มีการปิดการสนทนาใด ๆ เพื่อซ่อนปุ่มปิด:

$( "#dialog" ).dialog({
    dialogClass: "no-close",
    buttons: [{
        text: "OK",
        click: function() {
            $( this ).dialog( "close" );
        }
    }]
});

41

ฉันคิดว่ามันดีกว่า

open: function(event, ui) {
  $(this).closest('.ui-dialog').find('.ui-dialog-titlebar-close').hide();
}

ปัญหาคือบางครั้งมันซ่อนปุ่มปิดสำหรับการสนทนาอื่น ๆ เช่นกัน วิธีการป้องกันที่
Zaveed Abbasi

แม้ใช้ open: function (event, ui) {$ (this) .closest ('. ui-dialog'). find ('. ui-dialog-titlebar-close'). show (); } ไม่ทำงาน
Zaveed Abbasi

34

เมื่อคุณเรียก.dialog()ใช้งานองค์ประกอบแล้วคุณสามารถค้นหาปุ่มปิด (และมาร์กอัปกล่องโต้ตอบอื่น ๆ ) ได้ทุกเวลาที่สะดวกโดยไม่ต้องใช้ตัวจัดการเหตุการณ์:

$("#div2").dialog({                    // call .dialog method to create the dialog markup
    autoOpen: false
});
$("#div2").dialog("widget")            // get the dialog widget element
    .find(".ui-dialog-titlebar-close") // find the close button for this dialog
    .hide();                           // hide it

วิธีอื่น:

Inside ตัวจัดการเหตุการณ์ไดอะล็อกthisหมายถึงองค์ประกอบที่เป็น "dialoged" และ$(this).parent()อ้างถึงคอนเทนเนอร์มาร์กอัพไดอะล็อกดังนั้น:

$("#div3").dialog({
    open: function() {                         // open event handler
        $(this)                                // the element being dialogged
            .parent()                          // get the dialog widget element
            .find(".ui-dialog-titlebar-close") // find the close button for this dialog
            .hide();                           // hide it
    }
});

FYI, มาร์กอัปการโต้ตอบมีลักษณะเช่นนี้:

<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable">
    <!-- ^--- this is the dialog widget -->
    <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
        <span class="ui-dialog-title" id="ui-dialog-title-dialog">Dialog title</span>
        <a class="ui-dialog-titlebar-close ui-corner-all" href="#"><span class="ui-icon ui-icon-closethick">close</span></a>
    </div>
    <div id="div2" style="height: 200px; min-height: 200px; width: auto;" class="ui-dialog-content ui-widget-content">
        <!-- ^--- this is the element upon which .dialog() was called -->
    </div>
</div>

ตัวอย่างที่นี่


25

คำตอบของ Robert MacLean ไม่ได้ผลสำหรับฉัน

อย่างไรก็ตามมันใช้งานได้สำหรับฉัน:

$("#div").dialog({
   open: function() { $(".ui-dialog-titlebar-close").hide(); }
});


9

ไม่มีการทำงานข้างต้น วิธีแก้ปัญหาที่ใช้งานได้จริงคือ:

$(function(){
  //this is your dialog:
  $('#mydiv').dialog({
    // Step 1. Add an extra class to our dialog to address the dialog directly. Make sure that this class is not used anywhere else:
    dialogClass: 'my-extra-class' 
  })
  // Step 2. Hide the close 'X' button on the dialog that you marked with your extra class
  $('.my-extra-class').find('.ui-dialog-titlebar-close').css('display','none');
  // Step 3. Enjoy your dialog without the 'X' link
})

โปรดตรวจสอบว่ามันเหมาะกับคุณหรือไม่


7

วิธีที่ดีที่สุดในการซ่อนปุ่มคือการกรองด้วยแอททริบิวต์ data-icon:

$('#dialog-id [data-icon="delete"]').hide();


6

สำหรับการเลิกใช้คลาสรหัสย่อ:

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

อาจจะใช้.


6

ปุ่มปิดที่เพิ่มโดยวิดเจ็ต Dialog มีคลาส 'ui-dialog-titlebar-close' ดังนั้นหลังจากการเรียกครั้งแรกของคุณไปยัง. diog () คุณสามารถใช้คำสั่งเช่นนี้เพื่อลบปุ่มปิดอีกครั้ง: มันทำงาน ..

$( 'a.ui-dialog-titlebar-close' ).remove();

6

ฉันจับเหตุการณ์ปิดของกล่องโต้ตอบ รหัสนี้จะลบ<div>( #dhx_combo_list):

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

5
$(".ui-button-icon-only").hide();

2
คุณควรจะใช้ CSS ตรงนี้แทน JS ถ้าคุณซ่อนไอคอนไว้เท่านั้น ทั้งหมด.hide()จะเป็นชุดdisplay:noneใน CSS ดังนั้นเป็นหน้าที่เทียบเท่า$(".ui-button-icon-only").hide(); .ui-button-icon-only { display: none; }
KyleMit



2

วิธีง่ายๆในการบรรลุ: (ทำสิ่งนี้ในของคุณJavascript)

$("selector").dialog({
    autoOpen: false,
    open: function(event, ui) {   // It'll hide Close button
        $(".ui-dialog-titlebar-close", ui.dialog | ui).hide();
    },
    closeOnEscape: false,        // Do not close dialog on press Esc button
    show: {
        effect: "clip",
        duration: 500
    },
    hide: {
        effect: "blind",
        duration: 200
    },
    ....
});

1

เนื่องจากฉันพบว่าฉันกำลังทำสิ่งนี้อยู่หลายแห่งในแอปของฉันฉันจึงใส่มันไว้ในปลั๊กอิน:

(function ($) {
   $.fn.dialogNoClose = function () {
      return this.each(function () {
         // hide the close button and prevent ESC key from closing
         $(this).closest(".ui-dialog").find(".ui-dialog-titlebar-close").hide();
         $(this).dialog("option", "closeOnEscape", false);
      });
   };
})(jQuery)

ตัวอย่างการใช้งาน:

$("#dialog").dialog({ /* lots of options */ }).dialogNoClose();

0

ฉันเป็นแฟนพันธุ์แท้คนหนึ่ง นี่คือสิ่งที่ได้ผลสำหรับฉัน:

$("#dialog").siblings(".ui-dialog-titlebar").find(".ui-dialog-titlebar-close").hide();

0

วิธีการเกี่ยวกับการใช้สาย CSS บริสุทธิ์นี้ ฉันพบว่านี่เป็นคำตอบที่สะอาดที่สุดสำหรับการโต้ตอบด้วย Id ที่กำหนด:

.ui-dialog[aria-describedby="IdValueOfDialog"] .ui-dialog-titlebar-close { display: none; }

-1

คุณสามารถลบปุ่มปิดด้วยรหัสด้านล่าง มีตัวเลือกอื่น ๆ เช่นกันซึ่งคุณอาจต่อสู้มีประโยชน์

$('#dialog-modal').dialog({
    //To hide the Close 'X' button
    "closeX": false,
    //To disable closing the pop up on escape
    "closeOnEscape": false,
    //To allow background scrolling
    "allowScrolling": true
    })
//To remove the whole title bar
.siblings('.ui-dialog-titlebar').remove();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.