ฉันจะล้าง / รีเซ็ตวันที่ที่เลือกบนปฏิทิน jQuery UI Datepicker ได้อย่างไร


85

ฉันจะรีเซ็ตค่าปฏิทิน datepicker ได้อย่างไร .. ข้อ จำกัด วันที่ต่ำสุดและสูงสุด?

ปัญหาคือเมื่อฉันล้างวันที่ (โดยการลบค่ากล่องข้อความ) ข้อ จำกัด วันที่ก่อนหน้านี้ยังคงใช้อยู่

ฉันได้จัดเรียงเอกสารและไม่มีอะไรเพิ่มขึ้นในการแก้ปัญหา ฉันยังไม่พบวิธีแก้ไขอย่างรวดเร็วในการค้นหา SO / google

http://jsfiddle.net/CoryDanielson/tF5MH/


วิธีการแก้:

// from & to input textboxes with datepicker enabled
var dates = $("input[id$='dpFrom'], input[id$='dpTo']");

// #clearDates is a button to clear the datepickers
$('#clearDates').on('click', function(){
    dates.attr('value', '');
    dates.each(function(){
        $.datepicker._clearDate(this);
    });
});​​

_.clearDate () เป็นเมธอดส่วนตัวของอ็อบเจ็กต์ DatePicker คุณจะไม่พบมันใน API สาธารณะบนเว็บไซต์ของ jQuery UI แต่มันใช้งานได้อย่างมีเสน่ห์

คำตอบ:


86

ฉันพยายามทำสิ่งนี้ให้สำเร็จนั่นคือทำให้ datepicker ว่างเปล่าเพื่อให้ตัวกรองที่ป้อนโดยผู้ใช้สามารถลบออกได้ Googling เล็กน้อยฉันพบโค้ดที่น่ารักนี้:

คุณสามารถเพิ่มคุณสมบัติที่ชัดเจนได้แม้ในฟิลด์แบบอ่านอย่างเดียว เพียงเพิ่มรหัสต่อไปนี้ใน datepicker ของคุณ:

}).keyup(function(e) {
    if(e.keyCode == 8 || e.keyCode == 46) {
        $.datepicker._clearDate(this);
    }
});

ผู้คนจะสามารถไฮไลต์ (แม้แต่ช่องอ่านอย่างเดียว) จากนั้นใช้ backspace หรือปุ่มลบเพื่อลบวันที่โดยใช้_clearDateฟังก์ชัน

ที่มา


9
ว้าว. ทำไมถึงไม่ประชาสัมพันธ์ล่ะ?! ไม่รวมอยู่ใน API บน jQuery UI เช่นกัน .... ไม่สมเหตุสมผล ---- ฉันแก้ไขโพสต์ของคุณเพื่อให้การแก้ปัญหาตรงกับคำถามของฉันดีขึ้น พบที่ดีมาก
Cory Danielson

ยอมรับการแก้ไขของฉันฉันปรับคำตอบของคุณให้ตรงกับคำถามของฉันแทนที่จะเป็นการคัดลอก / วางโค้ดที่ไม่สมบูรณ์
Cory Danielson

การแก้ไขของคุณยังไม่ได้ใช้งานอยู่แล้วใช่ไหม ฉันไม่เห็นตัวเลือกที่จะยอมรับการแก้ไขของคุณ ... :)
Leniel Maccaferri

3
ไม่เป็นไร ฉันคิดว่าทั้งวิธีแก้ปัญหาที่รวมอยู่ในโพสต์ต้นฉบับของฉันและของคุณจะช่วยเกือบทุกคนที่หาทางมายังหน้านี้ บางทีความคิดเห็นเกี่ยวกับ keyCode 8 และ 46 คืออะไรหรือสิ่งที่thisอยู่ใน _clearDates ()
Cory Danielson

2
คุณวางสิ่งนี้ไว้ที่ไหนกันแน่?
0051977

63

คุณลอง:

$('selector').datepicker('setDate', null);

ซึ่งควรทำงานตามเอกสาร API


ฉันมีแบบฟอร์มที่มีการป้อน datepicker บางส่วนที่ฉันใช้เพื่อแก้ไขวันที่ที่ฉันต้องการกรอกตามวันที่ปัจจุบัน ฉันพบวิธีนี้เพื่อรีเซ็ตแบบฟอร์มการแก้ไขของฉันก่อนที่จะใช้ "setDate" กับวันที่ปัจจุบัน แต่ฉันมีปัญหาเกี่ยวกับรูปแบบ: ไม่มี('setDate', null)รูปแบบที่ฉันต้องการ(DD / MM / YYYY)แต่เมื่อฉันใช้ฉันมีMM / วว / ปปปป ... ข้อแตกต่างคือการใช้('setDate', null)ความคิดทำไม?
Mickaël Leger

ขอโทษมิกคาเอล - ฉันไม่รู้เรื่องนั้น คุณได้ลองรีเซ็ตรูปแบบหลังจากตั้งค่าวันที่เป็น null ตามstackoverflow.com/questions/1328025/…หรือไม่
DavidWainwright

22

คุณเพียงแค่ต้องตั้งค่าตัวเลือกอีกครั้งเป็น null:

dates.datepicker( "option" , {
    minDate: null,
    maxDate: null} );

ฉันเปลี่ยน jsfiddle ของคุณแล้ว: http://jsfiddle.net/tF5MH/9/


ใช่ขอบคุณ คุณถูกต้อง เป็นเรื่องตลกปัญหานี้ยังมีอยู่ในหน้าสาธิต jQuery UI Datepicker jqueryui.com/demos/datepicker/#date-rangeตั้งค่าเป็นวันที่จากนั้นล้างกล่องข้อความและปัญหาก็มีอยู่
Cory Danielson

1
นี่เป็นวิธีที่สะอาดที่สุดแน่นอน date.datepicker( "option" , {setDate: null, minDate: null, maxDate: null} );
AL3X


10

ลองเปลี่ยนรหัสการหักบัญชีเป็น:

$('#clearDates').on('click', function(){
    dates.attr('value', '');
    $("input[id$='dpFrom'], input[id$='dpTo']").datepicker( "option", "maxDate", null );
    $("input[id$='dpFrom'], input[id$='dpTo']").datepicker( "option", "minDate", null );
});

8

ลองใช้วิธีนี้จะเพิ่มปุ่มล้างบนปฏิทิน Jquery ที่จะล้างวันที่

$("#DateField").datepicker({
    showButtonPanel: true,
    closeText: 'Clear',
         onClose: function (dateText, inst) {
        if ($(window.event.srcElement).hasClass('ui-datepicker-close'))
        {
            document.getElementById(this.id).value = '';
        }
    }
});

1
คำตอบนี้น่าจะดีกว่าคำตอบอื่น ๆ แม้ว่าจะไม่ทำงานใน Firefox และการแทนที่document.getElementById(this.id).value = '';ด้วย$(this).val('').change();จะทำให้ดียิ่งขึ้นเนื่องจากตัวจัดการการเปลี่ยนแปลงใด ๆ ที่ได้รับการยอมรับก็จะถูกเรียกด้วยเช่นกัน
Ryan

3

รีเซ็ตแอตทริบิวต์วันที่สูงสุดใน datepicker ของคุณเมื่อคุณคลิกล้าง

จากเว็บไซต์ jquery

Get or set the maxDate option, after init.

    //getter
    var maxDate = $( ".selector" ).datepicker( "option", "maxDate" );
    //setter
    $( ".selector" ).datepicker( "option", "maxDate", '+1m +1w' );

ใช่คุณถูกต้อง ฉันทำเครื่องหมายว่า j08691 เป็นคำตอบที่ดีที่สุดเพราะเขาให้รหัสฉันสามารถตบลงไปในซอที่ใช้งานได้ น่าเสียดายที่ฉันไม่สามารถทำเครื่องหมายทั้งคู่ให้ดีที่สุด: /
Cory Danielson

ใช่ฉันรู้ฉันจะอธิบายให้ดีขึ้นเล็กน้อยด้วยรหัสที่เกี่ยวข้องกับปัญหาของคุณ แต่เขาเอาชนะฉันไป :)
Mark W

3

ฉันรู้ว่ามันสายไปหน่อย แต่นี่คือความสงบสุขง่ายๆของรหัสที่ทำเพื่อฉัน:

$('#datepicker-input').val('').datepicker("refresh");

ฉันไม่เห็นว่าการรีเฟรชมีอะไรพิเศษ คุณสามารถล้างค่าได้
omarjebari

1
ฉันชอบที่คุณใช้การโทรสาธารณะกับฟังก์ชันส่วนตัวเพื่อล้างการควบคุม
snowYetis

1
@Miguel BinPar ฉันรู้ว่าโพสต์นี้เก่า แต่คำตอบของคุณเป็นคำตอบเดียวที่ใช้ได้ผลสำหรับฉันหลังจาก 3 วันในการพยายามหาสิ่งนี้ ขอบคุณ!
kejo

3

คำตอบที่ชัดเจนคือคำตอบที่เหมาะกับฉัน

$('#datepicker').val('');

โดยที่ $ ('# datepicker') คือ id ขององค์ประกอบอินพุต


ฉันลองวิธีแก้ปัญหานั้นใน JSFiddle แล้ว แต่ก็ไม่ได้ผล jsfiddle.net/tF5MH/407ดูขั้นตอนการทำสำเนาด้านล่างอินพุต การใช้.val('')จะทำให้อินพุตว่างเปล่า แต่จะไม่ล้างข้อ จำกัด datepicker ในปฏิทิน
Cory Danielson

ฉันลองใช้ jQuery UI เวอร์ชันล่าสุด (v1.12.0) แล้ว แต่ก็ไม่ได้ผล
Cory Danielson

ขอบคุณตันโอมาร์ ฉันค้นหาโซลูชันการทำงานนี้ตั้งแต่ 20 นาทีที่แล้ว คุณเป็นคนช่วยชีวิต! ..
Mahesh

0

โซลูชันของ Leniel Macaferi เวอร์ชันที่ได้รับการแก้ไขเพื่อให้คีย์ backspace เป็นทางลัด "page back" ใน IE8 เมื่อช่องข้อความไม่มีโฟกัส (ซึ่งดูเหมือนจะเป็นเช่นนั้นเมื่อเปิด datepicker)

นอกจากนี้ยังใช้val()ในการเคลียร์ฟิลด์เนื่องจาก_clearDate(this)ไม่ได้ผลสำหรับฉัน

$("#clearDates").datepicker().keyup(function (e) {
    // allow delete key (46) to clear the field
    if (e.keyCode == 46)
        $(this).val("");

    // backspace key (8) causes 'page back' in IE8 when text field
    // does not have focus, Bad IE!!
    if (e.keyCode == 8)
        e.stopPropagation();
});

0

การเริ่มต้นdatepickerของฉันดูเหมือนว่า:

    dateOptions = {
                changeYear: true,
                changeMonth: true,
                dateFormat: 'dd/mm/yy',
                showButtonPanel: true,
                closeText: 'Clear',
            };

ดังนั้นปุ่ม"เสร็จสิ้น"เริ่มต้นจะมีข้อความ"ล้าง"

ตอนนี้ภายในdatepicker.jsค้นหาฟังก์ชันภายใน'_attachHandlers' ดูเหมือนว่า:

 _attachHandlers: function (inst) {
            var stepMonths = this._get(inst, "stepMonths"),
                id = "#" + inst.id.replace(/\\\\/g, "\\");
            inst.dpDiv.find("[data-handler]").map(function () {
                var handler = {
                    prev: function () {...},
                    next: function () {...},
                    hide: function () {
                        $.datepicker._hideDatepicker();
                    },
                    today: function () {...}
                    ... 

และเปลี่ยนฟังก์ชันซ่อนให้มีลักษณะดังนี้:

                   ...
                   hide: function () {
                        $.datepicker._clearDate(id);
                        $.datepicker._hideDatepicker();
                    },
                    ...

วิธีแก้ปัญหานี้มาจาก * data-handler = "hide" *


0

ฉันใช้รหัสนี้เพื่อล้างฟิลด์และเชนานิแกนทั้งหมด ฉันต้องการช่องว่างสำหรับกรณีการใช้งานของฉัน

jQuery.datepicker._clearDate(window.firstDay);
window.firstDay.datepicker('setDate',null);
window.firstDay[0].value = '';

ด้วยเหตุผลบางอย่าง.val('')มันไม่ได้ผลสำหรับฉัน แต่การข้าม jQuery ทำได้ ในความคิดของฉันมันเป็นข้อบกพร่องที่ไม่มีตัวเลือก. datepicker ('clear')


0

วิธีของฉันในการแก้ปัญหานี้

เปลี่ยน 'การควบคุม' var บน ui.js

controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
        this._get(inst, "closeText") + "</button>" + "<button type='button' class='ui-datepicker-close ui-datepicker-clear ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
        this._get(inst, "clearText") + "</button>" : "");

จากนั้นเพิ่ม clearText var

    this.regional[""] = { // Default regional settings
    closeText: "Done", // Display text for close link
    clearText: "Clear", // Display text for close link
    prevText: "Prev", // Display text for previous month link

และก่อนแสดงฟังก์ชัน

$(".i_date").datepicker
(
    {
        beforeShow: function (input, inst)
        {
            setTimeout
            (
                function () 
                { 
                    $('.ui-datepicker-clear').bind('click', function() { $(input).val(''); });
                }, 
                0
            );
        }
    }
);

0
$("#datepicker").datepicker({            
        showButtonPanel: true,
        closeText: 'Clear', 
        onClose: function () {
            var event = arguments.callee.caller.caller.arguments[0];                
            if ($(event.delegateTarget).hasClass('ui-datepicker-close')) {
                $(this).val('');
            }
        }
    });

0

ใน Firefox มันทำงานสำหรับฉันในรูปแบบ (ทางโปรแกรม) โดยที่การควบคุม datepicker ถูกปิดใช้งานโดยค่าเริ่มต้น

$("#txtDat2").prop('disabled', false); //temporary enable controls<br>
$("#txtDat2").val("YYYY-MM-DD"); //reset date to dd.mm.yyyyy
$("#txtDat2").prop('disabled', true); //back to default state

-1

โปรดลองวิธีแก้ปัญหานี้มันจะทำงานได้อย่างถูกต้องตามที่ฉันได้ลอง

$('selector').datepicker('setStartDate', 0);

 $('selector').datepicker('setEndDate', 0);
$('selector').datepicker('update');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.