วิธีรับ twitter bootstrap modal เพื่อปิด (หลังจากเปิดตัวครั้งแรก)


91

ฉันเป็น noob มากดังนั้นฉันคิดว่าฉันกำลังดูแลบางสิ่งบางอย่าง (อาจชัดเจน) ด้วยรูปแบบ twitter bootstrap สิ่งที่ฉันกำลังพยายามทำคือสร้างโมดอลเพื่อเปิดใช้งานบนมือถือเท่านั้น ใช้งานได้ดีกับการเพิ่มคลาส .visible-phone บน modal div จนถึงตอนนี้ดีมาก แต่ฉันต้องการให้มันใช้งานได้หมายความว่าคุณสามารถปิดได้ด้วยปุ่ม X และฉันไม่สามารถทำให้ปุ่มทำงานได้

<div class="modal visible-phone" id="myModal">
  <div class="modal-header">
    <button class="close" data-dismiss="modal">×</button>
    <h3>text introductory<br>want to navigate to...</h3>
 </div>
 <div class="modal-body">
    <ul class="nav">
      <li> ... list of links here </li>
    </ul>
   </div>
  </div>

ที่ด้านล่างของ html ฉันใส่ jquery.js (ตัวแรก) และ bootstrap.modal.js และ bootstrap.transition.js จริงๆแล้วโมดูล bootstrap js ทั้งหมด (ไม่ควรพลาดรวม) ฉันไม่มีประสบการณ์กับ js ..

โปรดยกโทษให้ฉันด้วยถ้าฉันทำคำถามโง่ ๆ จริงๆฉันไม่พบคำตอบสำหรับสถานการณ์เฉพาะนี้ในบันทึก

คำตอบ:


219

$('#myModal').modal('hide') ควรทำ


ใช่มันใช้งานได้ แต่ฉันไม่มีแอนิเมชั่นแบบเดียวกับที่เราใช้ 'data-พลู = "modal"?
คริส

ตกลงความผิดพลาดของฉัน อันที่จริงฉันจำปัญหาที่เกิดขึ้นในตอนนั้นไม่ได้ตอนนี้ฉันใช้สิ่งนี้และมันก็ใช้ได้ดี TY!
คริส

เรียนรู้เพิ่มเติมที่นี่ .. stackoverflow.com/questions/10944302/…
Sanjay Kumar

6
นี่เป็นเรื่องแปลก$('#myModal').modal('show')สำหรับฉัน แต่ซ่อนไม่ได้
Charlotte

3
@LittleBigBot ลองใช้$('#myModal').modal('toggle');แทน
Edson Horacio Junior

27

ฉันมีปัญหาในการปิดกล่องโต้ตอบโมดอล bootstrap หากเปิดด้วย:

$('#myModal').modal('show');

ฉันแก้ไขปัญหานี้โดยเปิดกล่องโต้ตอบตามลิงค์ต่อไปนี้:

<a href="#myModal" data-toggle="modal">Open my dialog</a>

อย่าลืมการเริ่มต้น:

$('#myModal').modal({show: false});

ฉันยังใช้แอตทริบิวต์ต่อไปนี้สำหรับปุ่มปิด:

data-dismiss="modal" data-target="#myModal"

สวัสดีคุณ artjom ขอบคุณ! จะเรียกใช้และให้ข้อเสนอแนะ คุณไม่ได้ใช้ปุ่มàเพื่อเปิดโมดอล? นั่นคือสิ่งที่ฉันพยายามจะบรรลุ เปิดตัวโมดอลในตอนแรกและเฉพาะบนมือถือเพื่อเสนอเมนูนำทางด่วนไปยังตำแหน่ง (ไม่เกี่ยวข้องโดยตรงเมื่ออยู่บนเดสก์ท็อป) นั่นคือแนวคิด
Monique De Haas

ใช่ data-พลู = "modal" data-target = "# myModal" แก้ไขปัญหาของฉันแล้ว! ถูกใจ!
Dheeraj Thedijje

13

เพิ่มคลาสซ่อนลงในโมดอล

<!-- Modal Demo -->
<div class="modal hide" id ="myModal" aria-hidden="true" >

รหัส Javascript

 <!-- Use this to hide the modal necessary for loading and closing the modal-->
 <script>
     $(function(){
         $('#closeModal').click(function(){
              $('#myModal').modal('hide');
          });
      });
 </script>

 <!-- Use this to load the modal necessary for loading and closing the modal-->
 <script>
     $(function () {
         $('#myModal').modal('show');
     });
  </script>

13

.modal ('hide')ซ่อนโมดอลด้วยตนเอง ใช้รหัสต่อไปนี้เพื่อปิดโมเดล bootstrap ของคุณ

$('#myModal').modal('hide');

ดูรหัสการทำงานที่นี่

หรือ

ลองดูที่นี่


6

ลองระบุโมดอลที่ปุ่มควรปิดด้วย data-target ดังนั้นปุ่มของคุณควรมีลักษณะดังนี้ -

<button class="close" data-dismiss="modal" data-target="#myModal">×</button>

นอกจากนี้คุณควรต้องใช้ bootstrap.modal.js เท่านั้นเพื่อให้คุณสามารถลบสิ่งอื่น ๆ ได้อย่างปลอดภัย

แก้ไข: หากไม่ได้ผลให้ลบคลาสโทรศัพท์ที่มองเห็นได้และทดสอบบนเบราว์เซอร์พีซีของคุณแทนโทรศัพท์ สิ่งนี้จะแสดงว่าคุณได้รับข้อผิดพลาดของจาวาสคริปต์หรือปัญหาความเข้ากันได้เช่น

แก้ไข: รหัสสาธิต

<html>
<head>
    <title>Test</title>
    <link href="/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />
    <script src="/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/bootstrap.modal.js" type="text/javascript"></script>

    <script type="text/javascript">
      $(document).ready(function () {
        if( navigator.userAgent.match(/Android/i)
            || navigator.userAgent.match(/webOS/i)
            || navigator.userAgent.match(/iPhone/i)
            || navigator.userAgent.match(/iPad/i)
            || navigator.userAgent.match(/iPod/i)
            || navigator.userAgent.match(/BlackBerry/i)
          ) {
          $("#myModal").modal("show");
        }

        $("#myModalClose").click(function () {
          $("#myModal").modal("hide");
        });
      });
    </script>
</head>
<body>
    <div class="modal hide" id="myModal">
      <div class="modal-header">
        <a class="close" id="myModalClose">×</a>
        <h3>text introductory<br>want to navigate to...</h3>
     </div>
     <div class="modal-body">
        <ul class="nav">
          <li> ... list of links here </li>
        </ul>
   </div>
  </div>
</body>
</html>

สวัสดี @Simon Cunningham Tnx ล้านสำหรับการตอบ! ฉันใส่ข้อมูลเป้าหมายไว้แล้ว ใช้งานไม่ได้ (น่าเสียดาย) จากนั้นฉันก็ลบคลาสโทรศัพท์ที่มองเห็นได้ ไม่ได้สร้างความแตกต่าง code <div class = "modal visible-phone" id = "myModal"> <div class = "modal-header"> <button class = "close" data-เลิก = "modal" data-target = "# myModal"> × </button> <h3> text introductory <br> ต้องการไปที่ ... </h3> </div> <div class = "modal-body"> <ul class = "nav"> <li> .. . รายการลิงค์ที่นี่ </li> <li> link2 </li> <li> link3 </li> </ul> </div> </div>code

<div class="modal visible-phone" id="myModal"> <div class="modal-header"> <button class="close" data-dismiss="modal" data-target="#myModal">×</button> <h3>text introductory<br>want to navigate to...</h3> </div> <div class="modal-body"> <ul class="nav"> <li> ... list of links here </li> <li> link2 </li> <li> link3 </li> </ul> </div> </div>
Monique De Haas

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

ตอนแรกคุณเปิดโมดอลของคุณอย่างไร? ลองเปิดตามด้านล่าง - <a data-toggle="modal" href="#myModal" class="btn"> โมดอลแบบเปิด </a>
Simon Cunningham

ฉันได้เพิ่มโค้ดสาธิตแบบลดทอนลงในคำตอบเดิมของฉันแล้ว ไฟล์ javascript และ css อยู่ในเครื่องของโครงการทดสอบของฉันเพียงแค่แทนที่ด้วยลิงก์ไปยังไฟล์ของคุณเอง
Simon Cunningham

6

ตามเอกสารการซ่อน / สลับควรใช้งานได้ แต่มันไม่

นี่คือวิธีที่ฉันทำ

$('#modal-id').modal('toggle'); //Hide the modal dialog
$('.modal-backdrop').remove(); //Hide the backdrop
$("body").removeClass( "modal-open" ); //Put scroll back on the Body

1
นี่เป็นคำตอบ "brute force" ที่ถูกต้องจริงๆ .. แต่ฉันขอแนะนำให้เขียนใหม่เพื่อให้ภาพเคลื่อนไหวถูกต้อง:$("#modal-id").modal("toggle"); $(".modal-backdrop").fadeOut('fast',function(){ $("body").removeClass( "modal-open" ); $(".modal-backdrop").remove(); });
DerDu


1

ฉันมีปัญหาเดียวกันใน iphone หรือเดสก์ท็อปไม่สามารถปิดกล่องโต้ตอบเมื่อกดปุ่มปิด

ฉันพบว่า<button>แท็กกำหนดปุ่มที่คลิกได้และจำเป็นต้องระบุแอตทริบิวต์ type สำหรับองค์ประกอบดังต่อไปนี้:

<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

ตรวจสอบโค้ดตัวอย่างสำหรับ modals bootstrap ที่: BootStrap javascript Page


0

หากคุณมีโมดอลไม่กี่ตัวที่แสดงพร้อมกันคุณสามารถระบุโมดอลเป้าหมายสำหรับปุ่มในโมดอลพร้อมแอตทริบิวต์data-toggleและdata-target:

<div class="modal fade in" id="sendMessageModal" tabindex="-1" role="dialog" aria-hidden="true">
      <div class="modal-dialog modal-sm">
           <div class="modal-content">
                <div class="modal-header text-center">
                     <h4 class="modal-title">Modal Title</h4>
                     <small>Modal Subtitle</small>
                </div>
                <div class="modal-body">
                     <p>Modal content text</p>
                </div>
                <div class="modal-footer">
                     <button type="button" class="btn btn-default pull-left" data-toggle="modal" data-target="#sendMessageModal">Close</button>
                     <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#sendMessageModal">Send</button>
                </div>
           </div>
      </div>
 </div>

ที่อื่นนอกรหัสโมดอลคุณสามารถมีปุ่มสลับอื่น:

<a href="index.html#" class="btn btn-default btn-xs" data-toggle="modal" data-target="#sendMessageModal">Resend Message</a>

ผู้ใช้ไม่สามารถคลิกปุ่มสลับในโมดอลในขณะที่ปุ่มเหล่านี้ซ่อนอยู่และปุ่มเหล่านี้จะทำงานร่วมกับตัวเลือก"modal"สำหรับแอตทริบิวต์data-toggleได้อย่างถูกต้อง โครงการนี้ใช้งานได้โดยอัตโนมัติ!


0

นี่คือตัวอย่างที่ไม่เพียง แต่ปิดโมดอลโดยไม่รีเฟรชเพจ แต่เมื่อกด Enter มันจะส่งโมดอลและปิดโดยไม่รีเฟรช

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

HTML (ส่วนท้ายของโมดอล):

 <div class="modal-footer form-footer"><br>
              <span class="caption">
                <button id="PreLoadOrders" class="btn btn-md green btn-right" type="button" disabled>Add to Cart&nbsp; <i class="fa fa-shopping-cart"></i></button>     
                <button id="ClrHist" class="btn btn-md red btn-right" data-dismiss="modal" data-original-title="" title="Return to Scan Order Entry" type="cancel">Cancel&nbsp; <i class="fa fa-close"></i></a>
              </span>
      </div>

jQUERY:

$(document).ready(function(){
// Allow enter key to trigger preloadorders form
    $(document).keypress(function(e) {       
      if(e.which == 13) {   
          e.preventDefault();   
                if($(".trigger").is(".ok")) 
                   $("#PreLoadOrders").trigger("click");
                else
                    return;
      }
    });
});

ดังที่คุณเห็นการส่งนี้ดำเนินการประมวลผลซึ่งเป็นสาเหตุที่ฉันมี jQuery นี้สำหรับโมดอลนี้ สมมติว่าฉันมีโมดอลอื่นในหน้าเว็บนี้ แต่ไม่มีการประมวลผลใด ๆ และเนื่องจากโมดอลหนึ่งเปิดขึ้นในแต่ละครั้งฉันจึงใส่อีกอัน$(document).ready()ในสคริปต์ php / js ส่วนกลางที่ทุกเพจได้รับและฉันให้ปุ่มปิดของโมดอลเป็นคลาสที่เรียกว่า:".modal-close" :

HTML:

<div class="modal-footer caption">
                <button type="submit" class="modal-close btn default" data-dismiss="modal" aria-hidden="true">Close</button>
            </div>

jQuery (รวม global.inc):

  $(document).ready(function(){
         // Allow enter key to trigger a particular button anywhere on page
        $(document).keypress(function(e) {
                if(e.which == 13) {
                   if($(".modal").is(":visible")){   
                        $(".modal:visible").find(".modal-close").trigger('click');
                    }
                }
         });
    });
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.