หลีกเลี่ยงการปิด Modal เมื่อกด Enter


108

ฉันได้ตั้งค่าโมดอล bootstrap โดยมีแบบฟอร์มอยู่ภายในฉันเพิ่งสังเกตว่าเมื่อฉันกดปุ่ม Enter โมดอลจะถูกปิด มีวิธีที่จะไม่ปิดเมื่อกด Enter หรือไม่?

ฉันพยายามเปิดใช้งานโมดอลด้วยแป้นพิมพ์: เท็จ แต่จะป้องกันการปิดด้วยแป้น ESC เท่านั้น


ฉันชอบคำถามนี้ ทำไมไม่เพียงแก้ไขซอร์สโค้ดของปลั๊กอิน?
Ryan

ฉันจะตรวจสอบว่าถ้าฉันพบสิ่งที่เป็นประโยชน์ฉันจะแก้ไข ในระหว่างนี้ฉันหวังว่าจะมีคนรู้คำตอบ
Luke Morgan

ฉันเปลี่ยนจาก click.dismiss.modal เป็น keyup ดูเหมือนว่าจะดีฉันจะตรวจสอบอีกครั้งในภายหลังเพื่อดูว่าฉันเมาอย่างอื่นหรือไม่
Luke Morgan

ใช่นั่นทำให้ปุ่มเสียหาย (ฉันเพิ่ม onclick = "$ ('# signinModal'). modal ('hide');" เพื่อหลีกเลี่ยงปัญหาเหล่านั้นดูเหมือนว่าทุกอย่างเรียบร้อยดี)
Luke Morgan

คำตอบ:


122

ฉันเพิ่งมีปัญหานี้เหมือนกัน
ปัญหาของฉันคือฉันมีปุ่มปิดในโมดอลของฉัน

<button class="close" data-dismiss="modal">&times;</button>

การกด Enter ในช่องป้อนข้อมูลทำให้ปุ่มนี้ถูกยิง ฉันเปลี่ยนเป็นจุดยึดแทนและใช้งานได้ตามที่คาดไว้ตอนนี้ (Enter ส่งแบบฟอร์มและไม่ปิดโมดอล)

<a class="close" data-dismiss="modal">&times;</a>

หากไม่เห็นแหล่งที่มาของคุณฉันไม่สามารถยืนยันได้ว่าสาเหตุของคุณเหมือนกัน


ไม่ใช้ปุ่มใดฉันใช้ <a> รายการฉันเดาว่าเป็นอย่างอื่น รหัสที่ฉันใช้นั้นเป็นโค้ดตัวอย่างในหน้า bootstrap โดยมีการเพิ่มแบบฟอร์มไว้ภายใน
Luke Morgan

ฉันไม่เห็นปุ่มที่มุมขวาบนนั่นคือปัญหา ตอนนี้ใช้งานได้ดีขอบคุณ!
Luke Morgan

+1 สุดยอดหา! ฉันสงสัยว่ามีใครใส่สิ่งนี้ไว้ในตัวติดตามปัญหา bootstrap หรือไม่? ฉันขี้เกียจตรวจสอบในขณะนี้ อาจจะหลังอาหารกลางวัน
Andrew

8
นี่ไม่ใช่แค่ปัญหาปุ่ม ฉันได้ลบปุ่มทั้งหมดออกจากโมดอลของฉันแล้ว (รวมถึง "x" ด้านขวาบน) แต่ถ้าฉันมีช่องข้อความในรูปแบบเดียวการกด Enter จะเป็นการปิดกล่องโต้ตอบ เป็นปัญหาเฉพาะเมื่อมีช่องข้อความเดียว เมื่อฉันมีสองตัว Enter จะไม่ปิดโมเดลไม่ว่าฟิลด์ใดจะมีโฟกัสก็ตาม
jpeskin

11
อาจใช้ type = "button" บนปุ่มยกเลิก
Muayyad Alsadi

78

เพียงเพิ่มแอตทริบิวต์type = "button"ให้กับองค์ประกอบปุ่มเบราว์เซอร์บางตัวจะแปลประเภทเป็นส่งโดยค่าเริ่มต้น

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Attributes

ใช้กับปุ่มทั้งหมดที่คุณมีในโมดอล

<button type="button" class="close" data-dismiss="modal">×</button>

19

ฉันมีปัญหานี้แม้ว่าจะลบปุ่มทั้งหมดออกจาก Bootstrap Modal แล้วก็ตามดังนั้นจึงไม่มีวิธีแก้ปัญหาใดที่ช่วยฉันได้

ฉันพบว่าแบบฟอร์มที่มีช่องข้อความเดียวจะทำให้เบราว์เซอร์ทำการส่งแบบฟอร์ม (และส่งผลให้ถูกปิด) หากคุณกด Enter ในขณะที่แป้นพิมพ์โฟกัสอยู่บนช่องข้อความ สิ่งนี้ดูเหมือนจะเป็นปัญหาเกี่ยวกับเบราว์เซอร์ / ฟอร์มมากกว่าสิ่งใด ๆ กับ Bootstrap

วิธีแก้ปัญหาของฉันคือตั้งค่าแอตทริบิวต์ onsubmit ของฟอร์มเป็น onsubmit = "return false"

นี่อาจเป็นปัญหาหากคุณใช้งาน submit จริงๆ แต่ฉันใช้เฟรมเวิร์ก JS ที่สร้างคำขอ AJAX แทนการส่งเบราว์เซอร์ดังนั้นฉันชอบปิดการส่งทั้งหมด (นอกจากนี้ยังหมายความว่าฉันไม่จำเป็นต้องปรับแต่งทุกองค์ประกอบของฟอร์มด้วยตนเองที่อาจทำให้เกิดการส่ง)

ข้อมูลเพิ่มเติมที่นี่: กล่องโต้ตอบโมดอล Bootstrap พร้อมช่องป้อนข้อความเดียวจะปิดบนปุ่ม Enter เสมอ


2
ฉันมีtype="button"ปุ่มปิด / ยกเลิกทั้งหมดแล้ว แต่ยังคงมีปัญหากับปุ่ม Enter เพื่อปิดโมดอลของฉัน ฉันมีช่องข้อความป้อนเพียง 1 ช่องในโมดอลของฉันและโซลูชันของคุณได้แก้ไขแล้ว ขอบคุณสำหรับคำตอบ!
Darren Parker

7

คุณสามารถใส่ปุ่มเข้าสู่ระบบก่อนปุ่มยกเลิกและวิธีนี้จะช่วยแก้ปัญหาที่คุณพบได้เช่นกัน

<div class="modal-footer">
    <button type="submit" class="btn primary">Login</button>
    <button type="submit" class="btn" data-dismiss="modal">Cancel</button>
</div>

6
ยกเลิกไม่ควรเป็นประเภทส่ง
Manatax

5

ฉันมีปัญหาเดียวกันและฉันแก้ไขด้วย

<form onsubmit="return false;">

แต่มีอีกวิธีหนึ่งคุณสามารถเพิ่มอินพุตที่มองไม่เห็นได้ดังนั้นแบบฟอร์มของคุณจะมีลักษณะดังนี้:

<form role="form" method="post" action="submitform.php">
    <input type="text" id="name" name="name" >
    <input type="text" style="display: none;">
</form>

3

ตอนนี้ฉันมีประสบการณ์คล้าย ๆ กันและวิธีที่ฉันแก้ไขคือแทนที่จะใช้แท็กฉันเปลี่ยนแท็กเป็นแท็กที่มี type = "button" สิ่งนี้ดูเหมือนจะช่วยแก้ปัญหาในการกดปุ่ม "enter" และปิดโมดอล bootstrap


2

ฉันมีปัญหานี้เหมือนกันและฉันก็แก้ไขด้วยวิธีนี้ ฉันเพิ่ม onsubmit ในแบบฟอร์ม ฉันยังต้องการที่จะสามารถใช้ปุ่ม Enter เป็นคีย์บันทึกได้ดังนั้นฉันจึงเพิ่มจาวาสคริปต์ save_stuff () เพื่อ onsubmit กลับเท็จ ใช้เพื่อป้องกันการส่งแบบฟอร์ม

<form onsubmit="save_stuff(); return false;">
 ...
</form>

<script>
    function save_stuff(){
      //Saving stuff
    }
</script>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.