Modal bootstrap: latar belakang melompat ke atas saat beralih


111

Saya punya masalah, dengan modal. Saya memiliki tombol di halaman, yang mengaktifkan modal. Saat modal muncul, halaman akan melompat ke atas.

Saya telah melakukan semua yang saya bisa untuk menemukan solusi / dll, tetapi saya benar-benar tersesat.

EDIT:

Saya juga telah mencoba dengan: $('#myModal').modal('show');tetapi hasilnya sama persis.


Halo Benni. Ya, saya menantang. Saya juga mencoba dengan: $ ('# myModal'). Modal ('show'); tetapi memiliki efek yang sama persis.
FooBar

1
dapatkah ini membantu Anda, masalah yang sama: stackoverflow.com/questions/12894570/…
Tandai

@ Mark, Lihat jawaban saya di bawah ...
Ravimallya

Saya perhatikan bahwa jika saya mengklik di mana saja di windowdalam moda itu, maka modal akan menyala. Tampaknya aneh dan tidak terduga. Saya menghapus buttonvia devtools, dan mengklik di mana saja di halaman tersebut masih membuka jendela modal. Apakah itu perilaku yang diinginkan? Saya ingin tahu apakah Anda tidak memiliki pemilih yang tepat untuk acara klik modal.
dward

Jawaban:


174

Ketika modal membuka modal-openkelas diatur ke <body>tag. Kelas ini diatur overflow: hidden;ke tubuh. Tambahkan aturan ini ke stylesheet Anda untuk mengganti gaya bootstrap.css:

body.modal-open {
    overflow: visible;
}

Sekarang gulungan itu harus tetap di tempatnya.


@pstenstrm, saya ragu. Anda diberitahu untuk mengganti css untuk kelas .modal-open. Tapi, bagaimana jika ada div penutup tambahan, dan dalam jawaban saya, saya tidak menimpa kelas apa pun dalam resolusi saya? Ini berfungsi dengan baik setelah menghapus 2 div tambahan. bs modal menambahkan div .modal-backdrop yang akan bingung di mana harus ditutup karena tag penutup tambahan.
Ravimallya

4
Tidak berfungsi untuk saya, saya memiliki modal di dalam iframe dan sedang bergulir ke atas ... ada ide?
Cabuxa.Mapache

5
Ini memperbaikinya untuk saya. Hanya untuk menambahkan akar masalah saya adalah 'body {height: 100%}'.
PeteG

23
Tidak bekerja untuk saya. Saya punya modal vanilla yang saya buka .modal('show')dan masih bergulir ke bagian atas halaman. Bootstrap v3.2.0
MandM

6
Saya harus menambah position: inheritkelas ini tetapi bekerja seperti pesona setelah itu.
adrian3martin

28

Jika Anda memanggil modal dengan tag. Coba hapus '#' dari atribut href. Dan panggil modal dengan atribut data.

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>

Saya membukanya persis seperti yang Anda posting di sana. Lihat tautannya
FooBar

5
jika Anda tidak menggunakan "<button>" tetapi <a>, seperti dalam kasus saya, Anda kehilangan ikon "tombol jari" saat Anda menggerakkan kursor mouse pada objek. Untuk mengatasi ini, saya telah melakukannya: ... href = "# mai_modal_id" data-toggle = "modal" ... dan saya tidak menggunakan data-target
pagurix

3
@pagurix - Komentar Anda bekerja paling baik untuk skenario saya.
AlfredBr

Menurut saya, @pagurix harus menulis komentarnya sebagai jawaban terpisah. Satu-satunya hal yang membantu. Jempolan!
Vibhor Dube

14

jika Anda menggunakan tag anchor karena <a href"#" ..> ... </a>dan href="#"menimbulkan masalah, hapus itu. Anda dapat membaca lebih lanjut di sini


12
$('the thing you click on').click(function ($e) {
            $e.preventDefault();
});

Ini akan membantu Anda menghentikan scroll bar yang berada di atas. Ini berhasil untuk saya


5

Mungkin bekerja dengan modal yang bersarang di suatu tempat dalam kode:

body.modal-open {
    overflow: visible;
    position: absolute;
    width: 100%;
    height:100%;
}

Bagi saya itu adalah kombinasi dari posisi, ketinggian, dan luapan.


4

Saya tidak melihat kesalahan tertentu, tetapi saya menyarankan Anda untuk memeriksa sintaks html Anda .

Sebuah tes kecil dengan sumber Anda memberi saya kesalahan seperti

Baris 127, Kolom 34: div elemen tidak tertutup.

              <div class="inner onlySides">

Ini bisa menjadi masalah.


Terima kasih - Saya akan memeriksa ini - meskipun saya merasa sulit untuk percaya bahwa ini dapat memicu masalah yang saya alami. Sepertinya Anda menggunakan plugin untuk melacak ini - jika demikian; yang?
FooBar

saya tidak menggunakan plugin kecuali firebug. Itu selalu merupakan hal yang baik untuk memeriksa validitas halaman Anda di validator.w3.org . Ini akan menjadi masalah karena jika div tidak ditutup, Anda akan berperilaku aneh :)
billyJoe

4

Cara termudah untuk menyelesaikan latar belakang lompatan adalah dengan menentukan dua parameter:

body.modal-open {
  overflow: visible;
  padding-right: 0 !important;
}

3

Saya mencoba mereplikasi masalah ini di localhost saya dan seaneh kelihatannya, ada konflik dengan file Bootstrap JS yang Anda gunakan.

Coba komentari kode Anda tentang:

<script src="/min/?f=bootstrap.min.js,modernizr.js,bootstrap-datetimepicker.js,nprogress.js,feedback.js,select2.min.js,jquery.unveil.js,equalheights.jquery.js,hogan-v2.0.0.min.edu-custom.js,jquery.visible.min.js,handlebars-v1.2.0.js,typeahead.bundle.min.js,jquery.gridster.js,cookie.jquery.js,jquery.autosize.min.js,application.js&ver=1392814384"></script>    

Dan sebagai gantinya gunakan Bootstrap 2.3.2:

<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>

Ini membuatnya berhasil untuk saya.

Saya mencobanya dengan Bootstrap versi 3 tetapi tidak berhasil. Saya masih tidak dapat menentukan bagian masalahnya tetapi di suatu tempat di sepanjang Firebug memberi saya e.preventDefault() is not a functionkesalahan - Saya menduga ini harus menjadi penyebab utama tetapi saya belum membandingkannya dengan file JS lainnya.


3

Saya mencoba mengatur .modal atas di tengah layar.

.modal {
    position: absolute;
    top: 50%;
}

Hanya 2 sen pikiran saya.


Cukup dekat. Saya tidak akan menurunkan suara karena masalah saya mungkin ada di tempat lain, tetapi ini menyebabkan bagian bawah layar menjadi redup, tetapi modal diposisikan ke arah tengah.
perajin

3

Dalam bootstrap 3.1.1 saya menyelesaikan dengan solusi ini:

body.modal-open {
    position: absolute !important;
}

2
Anda menyelamatkan hari saya @Filo Terima kasih banyak
vinothini

2

Anda memiliki 2 divtag penutup tambahan tepat sebelum <div id="footer">atau setelah<div id="mainFrame" class="group"> div. Saya menggunakan visual studio 2012 express untuk memeriksanya.

Hapus 2 div tambahan ini dan beri tahu kami cara kerjanya. Saya menghapus div ekstra dan menghapus semua skrip kustom. hanya mempertahankan inti jquery dan bootstrap di footer. berikut adalah tangkapan layar dari hasil akhir. berikut adalah taman bermain jsbin untuk Anda yang berfungsi dengan baik.

Saya menyarankan Anda untuk menggunakan headjs untuk memuat semua skrip dan file css. juga bukan praktik yang baik untuk memuat skrip apa pun dua kali.

masukkan deskripsi gambar di sini


4
jawaban yang tidak disukai membutuhkan komentar yang tepat dengan alasan.
Ravimallya

2

Coba gunakan ini untuk membuka modal dan lihat apa yang terjadi:

<a href="#generalModal" class="btn btn-primary btn-lg" data-toggle="modal">
  Launch demo modal 
</a>

2
body.modal-open {
overflow: visible !important;
}

Saya membutuhkan atribut penting untuk memperbaikinya


Ini berhasil untuk saya, dan saya memiliki masalah @ MandM (di komentar) dari jawaban pstenstrm: "Tidak berfungsi untuk saya. Saya punya vanilla modal yang saya buka dengan .modal ('show') dan masih bergulir ke bagian atas halaman. Bootstrap v3.2.0 ". Satu-satunya efek aneh yang dimilikinya adalah bahwa sekarang latar belakang akan bergulir jika Anda terus menggulirkan modal yang lebih tinggi dari jendela, tetapi ini adalah masalah kecil bagi saya. Terima kasih.
dgig

1

Saya memiliki masalah yang sama menggunakan Bootstrap 2.3.2

Terjadi masalah saat mengklik link:

Triknya adalah: return false;

<a href="#" class="btn" onclick="openPositionPopup(${positionReport[0]}); return false;">
     <i class="icon-map-marker"></i>
</a>

dan js:

function openModal() {
    $('#myModal').modal('show');
}

1

Saya menghabiskan waktu berjam-jam untuk mencoba semuanya di sini dan di tempat lain. Untuk penggunaan angularjs-material, ternyata saya harus menonaktifkan animasi pada objek config uibModal.open arg.

Sebagai contoh:

  $uibModal.open(
    {
      animation: false,
      component: 'myDialogComponent',
      size: 'lg',
      resolve: {
        details: function() {
          return detailsCollection;
        }
      }
    }
  );

Semoga ini bisa membantu orang lain.


1

Jika Anda menghadapi masalah ini dalam program Angular, tambahkan kode di bawah ini pada baris pertama file .scss.

::ng-deep {   
     body.modal-open {
          overflow: visible !important;
          position: absolute !important;   
     } 
}

0

Saya memiliki masalah yang sama dan saya pikir saya mencari tahu. Anda hanya perlu menempatkan modal HTML sebagai turunan langsung dari tag body ! Anda dapat menempatkan kode HTML untuk tombol yang memicu modal di mana pun Anda membutuhkannya. Saya yakin ini menghindari masalah pewarisan CSS dan posisi yang memicu masalah ini.

Contoh:

<body>
    <!-- All your other HTML code -->
    <div>
        <!-- Button trigger modal -->
        <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
            Launch demo modal
        </button>
    </div>

    <!-- Modal -->
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
            <h4 class="modal-title" id="myModalLabel">Modal title</h4>
          </div>
          <div class="modal-body">
            ...
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <button type="button" class="btn btn-primary">Save changes</button>
          </div>
        </div>
      </div>
    </div>
</body>

0

Akhirnya menemukan yang ini. JANGAN membungkus tombol yang menargetkan modal dalam tag anchor.

Buruk

<a href"#">
    <button type="button" class="btn"
data-toggle="modal" data-target="#myModal">See Detail</button>
</a>

Baik

<button type="button" class="btn"
    data-toggle="modal" data-target="#myModal">See Detail</button>

0

Yang ini melakukannya untuk saya

body.modal-open {
    overflow: inherit;
    padding-right: 0 !important;
}

Saya mengalami masalah serupa dengan navbar dan container jumping saat modal dibuka. Inilah yang saya cari.
Awhitey98

Senang bisa membantu!
lucu

0

Setelah membaca lusinan jawaban selama beberapa jam saya menyalin lagi kode asli dari file bootstrap dan men-debug langkah demi langkah untuk melihat apa yang menyebabkan saya selalu melompat ke atas. Karena versi terbaru dari Bootstrap 3 menunjukkan modal pada posisi Anda saat ini. Saya telah mengetahui bahwa -webkit-transform: translate3d(0,0,0);dan height: 100%dalam css body-tag saya menyebabkan perilaku ini. Mungkin ini membantu seseorang.


0

Bagi saya berfungsi ketika saya mengubah versi dari 3.1.1 menjadi 3.3.7

Jika Anda tidak harus menggunakan versi 3.3.1 coba ganti.

Setelah perubahan, sebaiknya periksa apakah fungsi lainnya berfungsi dengan benar.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

0

body.modal-open { position: inherit; }

Ini bekerja seperti pesona bagi saya.


0

Saya mencoba semua contoh di atas - ini adalah satu-satunya hal yang berhasil untuk saya:

.modal-open {

            padding-right: 0 !important;

        }

Melepaskan bantalan dari sisi kanan model - mencegah lompatan.


0

tinggi: 100% memecahkan masalah, tetapi Anda harus menambahkan "div" yang benar


0

Saya mendapat masalah yang sama dan tidak ada jawaban yang membantu saya. Menemukan solusi yang terlihat bodoh tetapi berhasil setidaknya dalam kasus saya.

Saya menemukan bahwa halaman menggulir ke atas hanya sekali dan setelah itu modal terbuka berikutnya berfungsi seperti yang diharapkan. Kemudian saya menemukan bahwa menyembunyikan elemen apa pun di DOM memulai gulungan aneh yang sama. Jadi saya hanya membuat div dummy setelah pemuatan halaman daripada menyembunyikan dan menghapusnya dan ini menyelesaikan masalah.

var $dummy= $("<div>");
$("body").append($dummy);
$dummy.hide().remove();

0

Saya menghadapi masalah yang sama. Masalahnya adalah saya menambahkan kelas .modal-open ke html dan elemen tubuh. Cukup tambahkan kelas ini ke tubuh dan semuanya berfungsi seperti yang diharapkan.


-1

Coba ini bekerja dengan sempurna

/* fix body.modal-open overflow:hidden */
body.modal-open {
    height: auto;
}


-3

Jika jawaban pstenstrm tidak berhasil untuk Anda, coba gabungkan dengan HTML tombol pengganti ini:

<a class="btn btn-primary btn-lg" data-toggle="modal" data-target="#generalModal" id="launchbutton" href="#launchbutton"> Launch demo modal </a>

Ini harus membuat tombol tetap di layar.

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.