jQuery UI Datepicker 달력에서 선택한 날짜를 지우거나 재설정하려면 어떻게합니까?


85

날짜 선택기 달력 값을 어떻게 재설정합니까? .. 최소 및 최대 날짜 제한?

문제는 텍스트 상자 값을 삭제하여 날짜를 지울 때 이전 날짜 제한이 여전히 적용된다는 것입니다.

나는 문서 를 정리해 왔으며 해결책으로 튀어 나온 것은 없습니다. 또한 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 개체의 개인 메서드입니다. jQuery UI 웹 사이트의 공용 API에서는 찾을 수 없지만 매력적으로 작동합니다.

답변:


86

사용자가 입력 한 필터를 제거 할 수 있도록 datepicker를 비우는 것입니다. 인터넷 검색을 통해이 달콤한 코드를 찾았습니다.

읽기 전용 필드에서도 지우기 기능을 추가 할 수 있습니다. datepicker에 다음 코드를 추가하기 만하면됩니다.

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

사람들은 강조 표시 (읽기 전용 필드 포함) 한 다음 백 스페이스 또는 삭제 키를 사용하여 _clearDate기능을 사용하여 날짜를 제거 할 수 있습니다.

출처


9
와. 왜 공개되지 않겠습니까?! jQuery UI의 API에서도 제외됩니다 .... 말이 안됩니다. ---- 솔루션이 내 질문과 더 잘 일치하도록 게시물을 편집했습니다. 아주 좋은 발견
코리 다니엘

내 편집을 받아, 나는 불완전 코드의 덤프 / 붙여 넣기 내 질문에 일치하는 대신 사본 인 당신의 대답을 쥐게
코리 다니엘

편집이 이미 활성화되어 있지 않습니까? 나는 :) ... 당신의 편집을 허용하는 옵션을 볼 수 없습니다
Leniel Maccaferri에게

3
아니, 괜찮아. 내 원본 게시물에 포함 된 솔루션과 귀하의 솔루션이이 페이지로가는 길을 찾는 거의 모든 사람에게 도움이 될 것이라고 생각합니다. 무엇 keyCode가 8, 46 또는 대해 어쩌면 약간의 의견 this_clearDates ()의 바로 내부에
코리 다니엘

1
이걸 정확히 어디에 두세요?
w0051977

63

시도해 보았 니:

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

API 문서 에 따라 작동 합니다.


현재 날짜에 따라 채우려는 일부 날짜를 편집하는 데 사용하는 datepicker 입력이있는 양식이 있습니다. 현재 날짜로 "setDate"를 사용하기 전에 편집 양식을 재설정하는이 솔루션을 찾았지만 형식 문제가 있습니다. ('setDate', null)원하는 형식이 없습니다 (DD / MM / YYYY) ,하지만 사용할 때 MM이 있습니다. / DD / YYYY ... 유일한 차이점 은를 사용 ('setDate', null)하는 것입니다. 그 이유는 무엇입니까?
Mickaël Leger

미카엘 미카엘-그건 모르겠어요. stackoverflow.com/questions/1328025/…에 따라 날짜를 null로 설정 한 후 형식을 재설정 해 보셨습니까 ?
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 설정은 날짜, 다음 텍스트 상자를 비우고 문제가 존재
코리 다니엘

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 Calender에 지우기 버튼이 추가됩니다.

$("#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();만든다 그것은 더 나은 다음 어떤 설정 변경 핸들러는 호출되는 때문이다.
라이언

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을 베스트 답변으로 표시 한 이유는 그가 제게 작동 한 바이올린에 꽂을 수있는 코드를 주었기 때문입니다. / : 불행하게도 나는 그들에게 모두 최선으로 표시 할 수 없습니다
코리 다니엘

예, 알고 있습니다. 문제와 관련된 코드를 사용하여 좀 더 잘 설명하려고했지만 그는 저를 이겼습니다. :)
Mark W

3

너무 늦었다는 것을 알고 있지만 여기에 나를 위해 한 간단한 코드가 있습니다.

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

새로 고침이 추가 기능을 수행하는 것을 볼 수 없습니다. 값을 지울 수 있습니다.
omarjebari

1
나는 당신이 컨트롤을 지우기 위해 공개 호출 대 개인 기능을 사용하고 있다는 것을 좋아합니다.
snowYetis 2011

1
@Miguel BinPar, 나는이 게시물이 오래되었다는 것을 알고 있지만 귀하의 답변은 이것을 알아 내려고 3 일 후에 나를 위해 일한 유일한 대답입니다. 감사!
kejo

3

분명한 대답은 저에게 효과적이었습니다.

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

여기서 $ ( '# datepicker')는 입력 요소의 ID입니다.


JSFiddle에서 해당 솔루션을 시도했지만 작동하지 않았습니다. jsfiddle.net/tF5MH/407 입력 아래의 재생 단계를 참조하십시오. 를 사용 .val('')하면 입력 내용이 비워 지지만 달력의 날짜 선택기 제한은 지워지지 않습니다.
Cory Danielson

또한 최신 버전의 jQuery UI (v1.12.0)를 사용해 보았지만 작동하지 않았습니다.
Cory Danielson

톤 오마에게 감사합니다. 지난 20 분 동안이 작업 솔루션을 검색했습니다. 당신은 생명의 은인 사람입니다! ..
Mahesh

0

Leniel Macaferi 솔루션의 수정 된 버전은 텍스트 필드에 포커스가 없을 때 IE8에서 백 스페이스 키가 "페이지 뒤로"바로 가기 (날짜 선택기가 열려있는 경우로 표시됨)를 설명하는 것입니다.

그것은 또한 나를 위해 작동하지 않았기 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

이 문제를 해결하는 방법

ui.js에서 var 'controls'변경

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.