Google Chrome'da yerel veri seçiciyi devre dışı bırakın


Yanıtlar:


141

Oku gizlemek için:

input::-webkit-calendar-picker-indicator{
    display: none;
}

Ve istemi gizlemek için:

input[type="date"]::-webkit-input-placeholder{ 
    visibility: hidden !important;
}

3
:: - webkit-input-yer tutucusu, "aa / gg / yyyy" metnini gizlemeyecektir çünkü bir yer tutucu değildir, yerel olarak kontrol edilir.
Justin Bull

1
Ayrıca bir seçici eksik. Referans için: stackoverflow.com/a/11418704/229787
Justin Bull

1
Bildiğim kadarıyla bu Android Chrome'da çalışmıyor - fiddle.jshell.net/RgY3t/138
Seb Charrot

54

Kötüye kullandıysanız <input type="date" />, muhtemelen kullanabilirsiniz:

$('input[type="date"]').attr('type','text');

onları metin girişlerine dönüştürmek için yükledikten sonra. Önce özel tarih seçicinizi eklemeniz gerekir:

$('input[type="date"]').datepicker().attr('type','text');

Veya onlara bir ders verebilirsiniz:

$('input[type="date"]').addClass('date').attr('type','text');

5
Kolayca en sevdiğim çözüm. Basittir ve tarayıcıya özel CSS seçicileri uygulamaz. Amaçlanan sonuç, IMO, JavaScript etkinleştirilirse yerel kontrolü engellemek ve özel bir tarih seçiciye izin vermek olmalıdır. Bununla birlikte, JavaScript devre dışı bırakılırsa, yerel kontroller yine de çalışır. Dürüst olmak gerekirse, bu kabul edilen cevap olmalıdır.
Justin Bull

2
@ travesty3 IE'nin bu sürümleri html5 datepickers'ı destekliyor mu, yoksa sadece metne geri mi dönüyor? Değilse, o zaman önemli değil.
rjmunro

2
Bir tarih alanı için <input type = "date"> kullanmanın onu neden kötüye kullandığını anlamıyorum? (bu cevabın ilk cümlesi)
Steve

3
Doğum Tarihi gibi bir alan için bir takvim tarihi seçicisi istememek, ancak yine de alanın yerel tarayıcı tarafından onaylanmasını istemek tamamen geçerlidir.
Duncanmoo

1
@Duncanmoo Doğum tarihlerini özel kılan nedir? Maksimum değeri bugüne (bebeklerin doğdukları gün girilmesine izin vermek istiyorsanız) veya N yıl önce sitenizin kullanıcıları için minimum yaş olarak ayarlayın. Özellikle mobil cihazlarda, doğum tarihimi girmek için bazı özel JS şeylerinden çok tarayıcının yerel tarih seçicisini kullanmayı tercih ederim. Ayrıca, doğrulamayı desteklemeyen kaç özel JS tarih seçici uygulaması mevcuttur?
rjmunro

15

Kullanabilirsin:

jQuery('input[type="date"]').live('click', function(e) {e.preventDefault();}).datepicker();

3
jQuery> = 1.7 kullanırsanız:jQuery('input[type="date"]').on('click', function(e) {e.preventDefault();}).datepicker();
yorch

Bu cevap, yerel stili kaldırmaz. stackoverflow.com/a/11418704/229787
Justin Bull

4
@JustinBull doğru, ancak soru stili kaldırmakla ilgili değildi, bunun yerine jQuery tarih seçicisinin bu cevabın ulaştığı şekilde kullanılmasına izin vermekle ilgili değil. Stilin nasıl kaldırılabileceği hakkında bir fikriniz var mı?
Jimbo

7

Modernizr ( http://modernizr.com/ ) ile bu işlevselliği kontrol edebilir. Sonra onu döndürdüğü boolean ile bağlayabilirsiniz:

// does not trigger in Chrome, as the date Modernizr detects the date functionality.
if (!Modernizr.inputtypes.date) { 
    $("#opp-date").datepicker();
}

3
Bu, yerel bir veri seçici kullanılamadığında jQuery veri seçici'ye geri dönmek için oldukça kullanışlıdır. Ancak, bu soru Chrome'un tarih seçicisinden kurtulmakla ilgili görünüyor, bu yüzden cevabınızı reddettim.
Sam

7

Bu benim için çalıştı

input[type=date]::-webkit-inner-spin-button, 
input[type=date]::-webkit-outer-spin-button { 
  -webkit-appearance: none; 
  margin: 0; 
}

2

Yukarıdaki kod, giriş öğesinin değerini ayarlamaz veya bir değişiklik olayını tetiklemez. Aşağıdaki kod, Chrome ve Firefox'ta çalışır (diğer tarayıcılarda test edilmemiştir):

$('input[type="date"]').click(function(e){
     e.preventDefault();
}).datepicker({
    onSelect: function(dateText){
        var d = new Date(dateText),
        dv = d.getFullYear().toString().pad(4)+'-'+(d.getMonth()+1).toString().pad(2)+'-'+d.getDate().toString().pad(2);
        $(this).val(dv).trigger('change');
    }
});

pad, dizeleri sıfırlarla doldurmak için basit bir özel String yöntemidir (gerekli)


1

Robertc'e katılıyorum, en iyi yol type = date kullanmamaktır, ancak JQuery Mobile Datepicker eklentim bunu kullanıyor. Bu yüzden bazı değişiklikler yapmam gerekiyor:

Jquery.ui.datepicker.mobile.js kullanıyorum ve şu değişiklikleri yaptım:

Gönderen (satır 51)

$( "input[type='date'], input:jqmData(type='date')" ).each(function(){

-e

$( "input[plug='date'], input:jqmData(plug='date')" ).each(function(){

ve kullanım formunda, metni yazın ve var eklentisini ekleyin:

<input type="text" plug="date" name="date" id="date" value="">

3
Yerel kod verileri için özel öznitelikler eklemek istiyorsanız, geçerli yol data-*öznitelikleri kullanmaktır . Bu durumda, data-plugbunun yerine özniteliğinizi çağırın plug, daha sonra HTML6 / 7/8 / vb. İçine eklenen yeni özniteliklerle asla çakışmayacağı garanti edilir.
robertc

1

Aşağıdakileri kullanıyorum (coffeeescript):

$ ->
  # disable chrome's html5 datepicker
  for datefield in $('input[data-datepicker=true]')
    $(datefield).attr('type', 'text')
  # enable custom datepicker
  $('input[data-datepicker=true]').datepicker()

düz javascript'e dönüştürülür:

(function() {
  $(function() {
    var datefield, _i, _len, _ref;
    _ref = $('input[data-datepicker=true]');
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      datefield = _ref[_i];
      $(datefield).attr('type', 'text');
    }
    return $('input[data-datepicker=true]').datepicker();
  }); 
}).call(this);

1

Bu benim için çalıştı:

// Hide Chrome datetime picker
$('input[type="datetime-local"]').attr('type', 'text');

// Reset date values
$("#EffectiveDate").val('@Model.EffectiveDate.ToShortDateString()');
$("#TerminationDate").val('@Model.TerminationDate.ToShortDateString()');

Olsa değer tarihi alanların hala orada ve doğru, bu görüntü vermedi. Bu yüzden tarih değerlerini görünüm modelimden sıfırladım.


0

Bu benim için çalışıyor:

;
(function ($) {
    $(document).ready(function (event) {
        $(document).on('click input', 'input[type="date"], input[type="text"].date-picker', function (e) {
            var $this = $(this);
            $this.prop('type', 'text').datepicker({
                showOtherMonths: true,
                selectOtherMonths: true,
                showButtonPanel: true,
                changeMonth: true,
                changeYear: true,
                dateFormat: 'yy-mm-dd',
                showWeek: true,
                firstDay: 1
            });

            setTimeout(function() {
                $this.datepicker('show');
            }, 1);
        });
    });
})(jQuery, jQuery.ui);

Ayrıca bakınız:

Yeni Chrome HTML5 tarih girişini nasıl devre dışı bırakabilirim?

http://zizhujy.com/blog/post/2014/09/18/Add-date-picker-to-dynamically-generated-input-elements.aspx


0

Bunun artık eski bir soru olduğunu biliyorum, ama buraya bu konu hakkında bilgi aramak için geldim, böylece başka biri de olabilir.

Tarayıcının 'tarih' gibi HTML5 giriş türlerini destekleyip desteklemediğini tespit etmek için Modernizr'i kullanabilirsiniz . Varsa, bu kontroller veri seçici gibi şeyleri görüntülemek için yerel davranışı kullanır. Aksi takdirde, kendi tarih seçicinizi görüntülemek için hangi komut dosyasının kullanılması gerektiğini belirtebilirsiniz. Benim için iyi çalışıyor!

Eklediğim jquery-ui sonra bu kodu eklenmiş benim sayfasına ve Modernizr:

<script type="text/javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(initDateControls);
    initDateControls();

    function initDateControls() {
        //Adds a datepicker to inputs with a type of 'date' when the browser doesn't support that HTML5 tag (type=date)'
        Modernizr.load({
            test: Modernizr.inputtypes.datetime,
            nope: "scripts/jquery-ui.min.js",
            callback: function () {
                $("input[type=date]").datepicker({ dateFormat: "dd-mm-yy" });
            }
        });
    }

</script>

Bu, yerel veri seçicinin Chrome'da ve jquery-ui'nin IE'de görüntülendiği anlamına gelir.


0

Laravel5 için Biri kullandığından beri

{!! Form :: input ('tarih', 'tarih_başlangıç', null, ['sınıf' => 'form-kontrol', 'id' => 'tarih_başlangıç', 'ad' => 'tarih_başlangıç']) !!}

=> Chrome, tarih seçicisini zorlayacaktır. => css ile alırsanız, normal biçimlendirme hatalarını alırsınız !! (Belirtilen değer gerekli biçime, "yyyy-MM-gg" ile uyumlu değil.)

ÇÖZÜM:

$ ('input [tür = "tarih"]'). attr ('tür', 'metin');

$("#date_start").datepicker({
    autoclose: true,
    todayHighlight: true,
    dateFormat: 'dd/mm/yy',
    changeMonth: true,
    changeYear: true,
    viewMode: 'months'
});
$("#date_stop").datepicker({
    autoclose: true,
    todayHighlight: true,
    dateFormat: 'dd/mm/yy',
    changeMonth: true,
    changeYear: true,
    viewMode: 'months'
});
$( "#date_start" ).datepicker().datepicker("setDate", "1d");
$( "#date_stop" ).datepicker().datepicker("setDate", '2d');
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.