Bootstrap datepicker ซ่อนอยู่หลังการเลือก


97

ฉันจะซ่อนปฏิทินหลังจากเลือกวันที่ได้อย่างไร มีฟังก์ชันเฉพาะที่ฉันสามารถใช้ได้หรือไม่? รหัสของฉันด้านล่าง:

$('#dp1').datepicker({
    format: 'mm-dd-yyyy',
    startDate: '-15d',
    autoclose: true,
    endDate: '+0d' // there's no convenient "right now" notation yet
});

ความช่วยเหลือใด ๆ จะได้รับการชื่นชม


6
เหตุใดจึงไม่เป็นลักษณะการทำงานเริ่มต้นของไลบรารี
กีฬา

คำตอบ:


158

คุณสามารถใช้เหตุการณ์changedate()เพื่อติดตามว่าวันที่เปลี่ยนแปลงเมื่อใดพร้อมกับdatepicker('hide')วิธีการซ่อนdatepickerหลังจากทำการเลือก:

$('yourpickerid').on('changeDate', function(ev){
    $(this).datepicker('hide');
});

การสาธิต

อัปเดต

นี่คือข้อบกพร่องของautoclose: true. ข้อบกพร่องนี้ได้รับการแก้ไขในต้นแบบล่าสุด ดูCOMMIT. รับรหัสล่าสุดจากGitHub


7
ฉันขอแนะนำให้ตรวจสอบเพิ่มเติมว่าโหมดมุมมองปัจจุบันเป็น 'วัน' หรือไม่: if (ev.viewMode === 'days') {$(this).datepicker('hide');}เนื่องจากคุณอาจไม่ต้องการซ่อน datepicker หลังจากเลือกเดือนหรือหนึ่งปี}
turan

1
ดูเหมือนว่า autoclose ถูกตั้งค่าเป็นเท็จตามค่าเริ่มต้น ... $(".date").datepicker({... autoclose: true, ... });ใช้ได้ดี !!!
Dani

46

หากเป็นความช่วยเหลือสำหรับใครก็ตาม bootstrap datepicker เวอร์ชัน 2.0 จะไม่ทำงานกับคำตอบที่ยอมรับอีกต่อไป

นี่คือวิธีที่ฉันทำให้มันทำงานกับฉัน:

$('yourpickerid').datepicker({
    format: 'dd/mm/yyyy',
}).on('changeDate', function(e){
    $(this).datepicker('hide');
});

ดูhttp://bootstrap-datepicker.readthedocs.org/en/latest/events.html#changedate


มีรุ่น 2 ไหม ฉันเห็น v1.6.4 เป็นเวอร์ชันล่าสุดบน Github
garryp

ใช้การปิดอัตโนมัติ (ดูคำตอบของ @ Salim หรือคำตอบที่ยอมรับที่อัปเดตแล้ว) แทนการจัดการเหตุการณ์ด้วยตนเอง หากคุณซ่อน datepicker เมื่อวันที่ถูกเปลี่ยนการพยายามพิมพ์วันที่อาจทำให้เกิดพฤติกรรมที่ไม่ต้องการได้
ลำเอียง

37
$('#input').datepicker({autoclose:true});

4
นี่คือคำตอบที่สมบูรณ์แบบ นี่ควรเป็นคำตอบที่ได้รับอนุมัติ
Sarower Jahan

3

หากคุณต้องการลบล้างพฤติกรรมของปฏิทินโดยทั่วไปทั่วโลกให้ลองแก้ไขฟังก์ชัน Datepicker (ในตัวอย่างของฉันคือบรรทัดที่ 82)

จาก

    this.autoclose = false;

ถึง

    this.autoclose = true;

ทำงานได้ดีสำหรับฉันเพราะฉันต้องการให้อินสแตนซ์ปฏิทินของฉันทำงานเหมือนเดิม


2
ไม่จำเป็นต้องเปลี่ยนคุณสมบัติเริ่มต้นในไลบรารี js คุณสามารถส่งผ่านเป็นคุณสมบัติของวัตถุไปยังฟังก์ชันเมื่อคุณเรียกใช้ ตัวอย่าง: $ ('# dob'). datepicker ({format: 'dd / mm / yyyy', autoclose: true});
Zeeshan

3

ปัญหาสามารถหยุดได้โดยปิดกั้นเหตุการณ์ซ่อนสำหรับองค์ประกอบอินพุตโดยภาษาลิเนสนี้:

var your_options = { ... };
$('.datetimepicker').datetimepicker(your_options).on('hide', function (e) {
    e.preventDefault();
    e.stopPropagation();
});


ขอบคุณเพื่อน! ฉันโกรธมากเพราะอินพุตถูกซ่อนไว้หลังจากการเลือกวันที่และสิ่งนี้ช่วยแก้ปัญหาของฉันได้ ไชโย!
spacebiker

3
  1. เพียงแค่เปิดไฟล์ bootstrap-datepicker.js
  2. ค้นหา: var defaults = $.fn.datepicker.defaults
  3. ชุด autoclose: true

บันทึกและรีเฟรชโครงการของคุณสิ่งนี้ควรทำ



1

ปิด datetimepicker เมื่อเลือกวันที่ (วันที่แสดง datetimepicker พร้อมเวลา)

$('.datepicker').datepicker({
    autoclose: true,
    closeOnDateSelect: true
}); 



0
$('.datepicker').datepicker({
    autoclose: true
}); 

คำตอบอื่นสำหรับคำถามนี้เหมือนกับของคุณทุกประการ OP ยังมีสิ่งนี้autoclose: trueในโค้ดตัวอย่าง
93196.93


0

อย่างน้อยในเวอร์ชัน 2.2.3 ที่ฉันใช้คุณต้องใช้autoCloseแทนautocloseไฟล์. กรณีจดหมายมีความสำคัญ


0

คุณสามารถเปลี่ยนรหัสแหล่งที่มาบูต-datepicker.js เพิ่มthis.hide();เช่น ne

  if (this.viewMode !== 0) {
    this.date = new Date(this.viewDate);
    this.element.trigger({
        type: 'changeDate',
        date: this.date,
        viewMode: DPGlobal.modes[this.viewMode].clsName
    });
    this.hide();//here
 }

0

มีปัญหากับนาฬิกายังคงแสดงแม้ว่าฉันจะเขียนรูปแบบ: 'YYYY-MM-DD' ,

ฉันต้องตั้งค่าpickTime: falseและหลังจากเปลี่ยน -> ซ่อนฉันต้องโฟกัส -> แสดง

$('#VBS_RequiredDeliveryDate').datetimepicker({
  format: 'YYYY-MM-DD',
  pickTime: false
});

$('#VBS_RequiredDeliveryDate').on('change', function(){
    $('.datepicker').hide();
});

$('#VBS_RequiredDeliveryDate').on('focus', function(){
    $('.datepicker').show();
});

0

สำหรับตัวเลือกวันที่และเวลา

$('yourpickerid').datetimepicker({
        format: 'dd/mm/yyyy',
}).on('changeDate', function(e){
        $(this).datetimepicker('hide');
});


0

ยังไม่เห็นสิ่งนี้กล่าวถึง แต่นี่คือสิ่งที่แก้ไขสำหรับฉัน:

switchOnClick: true
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.