JQuery UI Datepicker takviminde seçilen tarihleri ​​nasıl temizlerim / sıfırlarım?


85

Tarih seçici takvim değerlerini nasıl sıfırlarım? .. Minimum ve maksimum tarih kısıtlamaları?

Sorun şu ki, tarihleri ​​temizlediğimde (metin kutusu değerlerini silerek), önceki tarih kısıtlamalarının hala geçerli olmasıdır.

Ben üzerinden sıralama oldum dokümantasyon ve hiçbir şey bir çözüm olarak dışarı fırladı. Ayrıca bir SO / google aramasında hızlı bir düzeltme bulamadım

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


Çözüm:

// 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 nesnesinin özel bir yöntemidir. Bunu jQuery UI'nin web sitesinde genel API'de bulamazsınız, ancak bir cazibe gibi çalışır.

Yanıtlar:


86

Ben de bunu başarmaya çalışıyordum, yani tarih seçiciyi boşaltın ki kullanıcı tarafından girilen filtreler kaldırılabilsin. Biraz Google'da gezinirken şu tatlı kod parçasını buldum:

Temiz özelliği salt okunur alanlarda bile ekleyebilirsiniz. Aşağıdaki kodu tarih seçicinize eklemeniz yeterlidir:

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

Kişiler (Salt Okunur alanları bile) vurgulayabilir ve ardından _clearDateişlevi kullanarak tarihi kaldırmak için geri al veya sil tuşunu kullanabilir .

Kaynak


9
Vay. Bu neden duyurulmasın ?! JQuery kullanıcı arayüzünde de API dışında tutulur .... bir anlam ifade etmiyor. ---- Gönderinizi, çözümün sorumla daha iyi eşleşeceği şekilde düzenledim. Çok güzel
keşif

Düzenlememi kabul et, eksik kodu kopyala / yapıştır dökümü olmak yerine cevabını sorumla eşleşecek şekilde değiştirdim
Cory Danielson

Düzenlemeniz zaten etkin değil mi? Düzenlemenizi kabul etmek için bir seçenek göremiyorum ... :)
Leniel Maccaferri 01.12.2012

3
Hayır, sorun değil. Hem orijinal yazımda yer alan çözümün hem de sizinki bu sayfaya giden yolunu bulan hemen hemen herkese yardımcı olacağını düşünüyorum. Belki keyCode 8 ve 46'nın ne thisolduğu veya _clearDates () içinde tam olarak ne olduğu hakkında bazı yorumlar
Cory Danielson

2
bunu tam olarak nereye koyuyorsun?
w0051977

63

Denedin mi:

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

Bu, API belgelerine göre çalışmalıdır


Şu anki tarihe göre doldurmak istediğim bir tarihi düzenlemek için kullandığım bazı tarih seçici girdileri olan bir formum var. Bu çözümü, mevcut tarihle "setDate" kullanmadan önce düzenleme formumu sıfırlamak için buluyorum, ancak bir biçim sorunum var: ('setDate', null)İstediğim biçime sahip değilim (GG / AA / YYYY) , ancak kullandığımda AA var / GG / YYYY ... tek fark kullanımı ('setDate', null), herhangi bir fikriniz neden?
Mickaël Leger

Üzgünüm Mickael - Bunu bilmiyorum. Stackoverflow.com/questions/1328025/… uyarınca tarihi null olarak ayarladıktan sonra biçimi sıfırlamayı denediniz mi?
DavidWainwright

22

seçenekleri tekrar null olarak ayarlamanız yeterlidir:

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

Jsfiddle'ınızı değiştirdim: http://jsfiddle.net/tF5MH/9/


evet, teşekkürler. haklısın. Komik, bu sorun jQuery UI Datepicker Demo sayfasında bile var. jqueryui.com/demos/datepicker/#date-range Tarihi ayarlayın, ardından metin kutusunu boşaltın ve sorun var
Cory Danielson

1
Bu kesinlikle en temiz yol. date.datepicker( "option" , {setDate: null, minDate: null, maxDate: null} );
AL3X


10

Takas kodunu şu şekilde değiştirmeyi deneyin:

$('#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

Bunu Deneyin, Jquery Takvimine Tarihi Silecek Temizle Düğmesi Ekleyecektir.

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

1
Bu cevap, Firefox'ta çalışmasa da muhtemelen diğerlerinden daha iyidir. Ve değiştirilmesi document.getElementById(this.id).value = '';ile $(this).val('').change();markaların daha da iyi o zaman herhangi kurulan değişiklik işleyicileri de denilen olsun çünkü.
Ryan

3

Temizle'yi tıkladığınızda tarih seçicinizdeki maksimum tarih özelliklerini sıfırlayın.

Jquery web sitesinden

Get or set the maxDate option, after init.

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

Evet, haklısın. J08691'i en iyi cevap olarak işaretledim çünkü bana işe yarayan kemanla tokatlayabileceğim bir kod verdi. Maalesef ikisini de en iyi olarak işaretleyemedim: /
Cory Danielson

Evet biliyorum, probleminize göre bazı kodlarla bunu biraz daha iyi açıklayacaktım, ama beni yendi. :)
Mark W

3

Biliyorum biraz geç, ama işte benim için bunu yapan basit bir kod barışı:

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

Yenilemenin fazladan bir şey yaptığını göremiyorum. Değeri temizleyebilirsiniz.
omarjebari

1
Kontrolü temizlemek için genel arama yerine özel işlevi kullanmanız hoşuma gidiyor.
snowYetis

1
@Miguel BinPar, bu yazının eski olduğunu biliyorum ama cevabınız, bunu anlamaya çalıştıktan 3 gün sonra benim için çalışan tek cevap. Teşekkürler!
kejo

3

Açık cevap, benim için işe yarayan cevaptı.

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

$ ('# datepicker'), giriş öğesinin kimliğidir.


Bu çözümü JSFiddle'da denedim ve işe yaramadı. jsfiddle.net/tF5MH/407 Girişlerin altındaki çoğaltma adımlarına bakın. Kullanımı .val('')girdileri boşaltacaktır, ancak takvimlerdeki tarih seçici kısıtlamalarını ortadan kaldırmayacaktır.
Cory Danielson

Ayrıca jQuery UI'nin (v1.12.0) en son sürümünü denedim ve işe yaramadı.
Cory Danielson

Çok teşekkürler Omar. Bu çalışma çözümünü son 20 dakikadan beri araştırıyorum. sen bir cankurtaran adamsın! ..
Mahesh

0

Leniel Macaferi'nin, bir metin alanı odağa sahip olmadığında geri silme anahtarının IE8'de bir "sayfa geri" kısayolu olmasını hesaba katan çözümünün değiştirilmiş bir sürümü (bu, tarih seçici açıkken böyle görünüyor).

Benim için işe yaramadığı için val()alanı temizlemek için de kullanıyor _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

Tarih seçici başlatmam şöyle görünüyor:

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

Bu nedenle, varsayılan 'Bitti' düğmesinin 'Temizle' metni olacaktır.

Şimdi, iç datepicker.js iç fonksiyonu bulmak '_attachHandlers' Öyle görünüyor:

 _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 () {...}
                    ... 

Ve gizle işlevini şöyle görünecek şekilde değiştirin :

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

Çözüm bu * veri işleyiciden geldi = "gizle" *


0

Bu kodu alanı ve tüm saçmalıkları temizlemek için kullanıyorum. Kullanım durumum için boş bir alana ihtiyacım vardı

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

Nedense .val('')benim için çalışmazdı. Ancak jQuery'yi atlamak bunu yaptı. Bana göre .datepicker ('temizle') seçeneğinin olmaması bir kusur.


0

Bu sorunu çözme yolum

Ui.js üzerinde var 'kontrollerini' değiştirin

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>" : "");

Sonra bir clearText var ekleyin

    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

Ve gösteri işlevinden önce

$(".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'ta, tarih seçici kontrolünün varsayılan olarak devre dışı bırakıldığı formda (programlı olarak) benim için iş yapar:

$("#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

Lütfen bu çözümü deneyin, denediğim gibi düzgün çalışacak

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

 $('selector').datepicker('setEndDate', 0);
$('selector').datepicker('update');
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.