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?


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

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


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

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


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" );
        }
    }]
});

41

Saya pikir ini lebih baik.

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

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


25

Jawaban Robert MacLean tidak berhasil untuk saya.

Namun ini berhasil bagi saya:

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

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

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.


7

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

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


6

Untuk menonaktifkan kelas, kode pendek:

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

dapat digunakan.


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

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

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

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.



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
    },
    ....
});

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

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

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

-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();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.