Bagaimana cara menghapus tombol tutup pada dialog jQuery UI?

775

Bagaimana cara menghapus tombol tutup (tanda X di sudut kanan atas) pada kotak dialog yang dibuat oleh jQuery UI?

Robert MacLean
sumber
11
Periksa dokumentasinya, subtitle
Mike Cole
1
@MikeCole Dokumentasi ini untuk 1.10 - Saya pikir jika Anda ingin menyembunyikan tombol tutup di versi yang lebih rendah, Anda harus melakukan sesuatu seperti jawaban di bawah ini.
Jarrett
1
Gunakan "ui-dialog-titlebar-close": "display: none;" ketika kita mengatur dialog modal
jqueryui

Jawaban:

711

Saya telah menemukan ini bekerja pada akhirnya (perhatikan baris ketiga mengesampingkan fungsi terbuka yang menemukan tombol dan menyembunyikannya):

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

Untuk menyembunyikan tombol tutup pada semua dialog, Anda juga dapat menggunakan CSS berikut:

.ui-dialog-titlebar-close {
    visibility: hidden;
}
Robert MacLean
sumber
121
$(".ui-dialog-titlebar-close", ui).hide();untuk menyembunyikan tombol untuk dialog ini saja.
Anthony Serdyukov
67
Saya tidak bisa membuatnya bekerja dari parameter ui. Saya akhirnya menggunakan: $ (". Ui-dialog-titlebar-close", $ (this) .parent ()). Hide ();
Nigel
70
@Anton Hanya ingin menunjukkan bahwa hanya menetapkan 'ui' tidak berfungsi. Anda harus menggunakan 'ui.dialog'. jadi baris yang benar adalah $ (". ui-dialog-titlebar-close", ui.dialog) .hide ();
Bradley Mountford
22
@ Bradley. ui tidak bekerja untuk saya, ui.dialog tetapi diterapkan pada setiap contoh. Agar hanya dapat diterapkan pada fungsi yang berfungsi terbuka, saya harus melakukan ini: $ (". Ui-dialog-titlebar-close", this.parentNode) .hide ();
Nabab
12
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
opengrid
361

Berikut adalah pilihan lain hanya menggunakan CSS yang tidak melewati setiap dialog pada halaman.

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>

Javascript.

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

Contoh Kerja

David
sumber
6
Saya suka pendekatan ini karena saya bisa menggunakannya di samping hal-hal seperti: .noTitleDlg .ui-dialog-titlebar {display: none} di CSS untuk membangun cara saya ingin dialog saya muncul dan berperilaku dan kemudian hanya mengatur dialogClass yang sesuai.
A. Murray
11
solusi sangat bersih ... +1 karena tidak melibatkan fungsionalitas js tambahan untuk menghapus tombol.
Bong
2
Ide yang hebat. Sangat berguna untuk menargetkan dialog tertentu dalam situasi di mana Anda menggunakan metode terbuka yang sama untuk semua dialog, dan sangat tidak praktis untuk mengubahnya untuk contoh tertentu.
ZolaKt
3
Solusi favorit saya Saya berpikir sesuatu seperti ini akan menjadi pendekatan terbaik. Terima kasih sudah memilikinya kode di sini. Membangun di atas ini, saya suka menggunakan variasi ini yang akan mengambil atribut kelas dari div konten dialog, di mana saya dapat menempatkan kelas "tidak-tutup":dialogClass : $("#my-dialog-id").attr("class"),
LS
Solusi ini memungkinkan penutupan dengan melarikan diri, jika Anda ingin mencegah penutupan pada penggunaan melarikan diri:$( ".selector" ).dialog({ dialogClass: 'no-close' , closeOnEscape: false,});
Mladen Adamovic
124

jawaban "terbaik" tidak akan bagus untuk banyak dialog. ini solusi yang lebih baik.

open: function(event, ui) { 
    //hide close button.
    $(this).parent().children().children('.ui-dialog-titlebar-close').hide();
},
Pangeran
sumber
23
Ini lebih rumit dari yang Anda butuhkan. $(".ui-dialog-titlebar-close", $(this).parent()).hide();
Kevin Panko
@KevinPanko saran Anda berfungsi dengan baik ketika menggunakan contoh yang disediakan oleh situs demo jquery ui dengan ASP.NET v2.0 di halaman .aspx. jqueryui.com/demos/dialog/modal-form.html
Matthew Dally
6
.closest ('. ui-dialog') lebih baik daripada mengasumsikan orang tua.
technomage
86

Anda dapat menggunakan CSS untuk menyembunyikan tombol tutup alih-alih JavaScript:

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

Jika Anda tidak ingin memengaruhi semua modals, Anda bisa menggunakan aturan like

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

Dan berlaku .hide-close-btnuntuk simpul teratas dialog

Gordian Yuan
sumber
3
Jawaban ini mudah dan langsung. Namun, itu hanya berlaku jika Anda ingin menonaktifkan tombol untuk semua dialog.
Mark Brittingham
@MarkBrittingham Anda hanya bisa menerapkan kelas CSS khusus ke modal Anda dan ke pemilih, maka ini akan berlaku untuk siapa pun yang Anda inginkan
Juan Mendes
48

Seperti yang ditunjukkan pada halaman resmi dan disarankan oleh David:

Buat gaya:

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

Kemudian, Anda bisa menambahkan kelas no-close ke sembarang dialog untuk menyembunyikan tombol tutupnya:

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

Saya pikir ini lebih baik.

open: function(event, ui) {
  $(this).closest('.ui-dialog').find('.ui-dialog-titlebar-close').hide();
}
Miguel Galante
sumber
Masalahnya adalah kadang-kadang menyembunyikan tombol tutup untuk dialog lainnya juga. bagaimana mencegahnya.
Zaveed Abbasi
Bahkan Menggunakan fungsi open: (event, ui) {$ (this) .closest ('. Ui-dialog'). Find ('. Ui-dialog-titlebar-close'). Show (); } tidak bekerja.
Zaveed Abbasi
34

Setelah Anda memanggil .dialog()suatu elemen, Anda dapat menemukan tombol tutup (dan markup dialog lainnya) pada waktu yang tepat tanpa menggunakan penangan acara:

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

Metode alternatif:

Di dalam penangan acara dialog, thismerujuk pada elemen yang sedang "didialog" dan $(this).parent()merujuk ke wadah markup dialog, jadi:

$("#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, markup dialog terlihat seperti ini:

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

Demo di sini

Salman A
sumber
25

Jawaban Robert MacLean tidak berhasil untuk saya.

Namun ini berhasil bagi saya:

$("#div").dialog({
   open: function() { $(".ui-dialog-titlebar-close").hide(); }
});
TERBANG
sumber
9
$("#div2").dialog({
   closeOnEscape: false,
   open: function(event, ui) { $('#div2').parent().find('a.ui-dialog-titlebar-close').hide();}
});
Alok Vad
sumber
9

Tidak satu pun di atas berfungsi. Solusi yang benar-benar berfungsi adalah:

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

Silakan periksa apakah itu bekerja untuk Anda.

Michael Zelensky
sumber
7

Cara terbaik untuk menyembunyikan tombol adalah dengan memfilternya dengan atribut data-ikonnya:

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

http://jsfiddle.net/marcosfromero/aWyNn/

$('#yourdiv').                 // Get your box ...
  dialog().                    // ... and turn it into dialog (autoOpen: false also works)
  prev('.ui-dialog-titlebar'). // Get title bar,...
  find('a').                   // ... then get the X close button ...
  hide();                      // ... and hide it
marcosfromero
sumber
6

Untuk menonaktifkan kelas, kode pendek:

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

dapat digunakan.

Caniko
sumber
6

Tombol tutup yang ditambahkan oleh widget Dialog memiliki kelas 'ui-dialog-titlebar-close', jadi setelah panggilan awal Anda ke .dialog (), Anda dapat menggunakan pernyataan seperti ini untuk menghapus tombol tutup lagi: Berhasil ..

$( 'a.ui-dialog-titlebar-close' ).remove();
Sonal S.
sumber
6

Saya menangkap acara dekat kotak dialog. Kode ini kemudian menghapus <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();
  });
},
ruwan
sumber
5
$(".ui-button-icon-only").hide();
Cos
sumber
2
Anda harus dapat menggunakan CSS langsung di sini daripada JS jika Anda hanya menyembunyikan ikon. Semua .hide()tidak diatur display:nonedalam CSS, jadi $(".ui-button-icon-only").hide();secara fungsional setara dengan .ui-button-icon-only { display: none; }.
KyleMit
3

Anda juga dapat menghapus baris tajuk Anda:

<div data-role="header">...</div>

yang menghapus tombol tutup.

kuning mellow
sumber
2
document.querySelector('.ui-dialog-titlebar-close').style.display = 'none'
Matthew Wastrodowski
sumber
2

Cara mudah untuk mencapai: (Lakukan ini di Anda 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
    },
    ....
});
Arsman Ahmad
sumber
1

Karena saya menemukan saya melakukan ini di beberapa tempat di aplikasi saya, saya membungkusnya dalam sebuah plugin:

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

Contoh Penggunaan:

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

Saya adalah penggemar one-liners (tempat mereka bekerja!). Inilah yang bekerja untuk saya:

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

Bagaimana kalau menggunakan garis CSS murni ini? Saya menemukan ini solusi terbersih untuk dialog dengan ID yang diberikan:

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

Anda dapat menghapus tombol tutup dengan kode di bawah ini. Ada juga opsi lain yang mungkin berguna untuk Anda lawan.

$('#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();
bpjoshi
sumber