HTML 5 giriş türü = “date” Firefox ve / veya IE 10'da nasıl çalışır?


191

Bunca input type="date"zaman sonra Firefox'ta hala desteklenmeyen garip buluyorum . Aslında, bir giriş öğesinde HTML 5 yeni türlerin çoğunu (varsa) eklediklerini sanmıyorum. IE10'da desteklenmediğine şaşırmadım. Benim sorum ...

Sadece IE ve Firefox Tarayıcıları için bir takvim / tarih almak için başka bir .js dosyası (yani DatePicker Widget) eklemeden çalışan type="date"bir inputöğeye nasıl jQueryUIulaşılır? Firefox ve / veya IE Tarayıcılarında bu işlevselliği varsayılan olarak çalıştıracak bir yere (belki de CDN?) Uygulanabilecek bir şey var mı? IE 8+ Tarayıcıları ve Firefox'u hedeflemeye çalışmak önemli değil, en yeni sürüm (28.0) iyi olacak.

GÜNCELLEME: Firefox 57+ giriş türünü = tarih destekler


29
Firefox'un bunu hala desteklemediğine dair bana saçma geliyor. Bugün Chrome'dan Firefox'a geçtim, sadece bu günlerde ne olduğunu görmek için bir gün / hafta boyunca ve bu hemen geri dönmeyi istiyor!
Codemonkey

19
onun bir şaka FF supping tarih değil
SuperUberDuper

6
Bu yüzden insanlar Firefox'un en iyi tarayıcı olduğunu söylediğinde üzülüyorum.
Martin Braun

1
Çok amaçlı değilken, sadece jquery veya diğer bağımlılıklar olmadan düz bir js lib olan kazma kullanarak sona erdi ...
mb21

2
Firefox 57'de varsayılan olarak çalışıyor gibi görünüyor. Yine de!
Antoine Pinsard

Yanıtlar:


138

Gerekirse , cdn + ' da bulunan webshims'i deneyebilirsiniz .

İşte CDN ile bir demo: http://jsfiddle.net/trixta/BMEc9/

<!-- cdn for modernizr, if you haven't included it already -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script>
<!-- polyfiller file to detect and load polyfills -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script>
<script>
  webshims.setOptions('waitReady', false);
  webshims.setOptions('forms-ext', {types: 'date'});
  webshims.polyfill('forms forms-ext');
</script>

<input type="date" />

Varsayılan yapılandırmanın sağlanmaması durumunda, yapılandırmanın birçok yolu vardır . Burada tarih seçici yapılandırıcısını bulabilirsiniz .

Not: İleride webshim için yeni hata düzeltme sürümleri olabilir. Artık büyük sürüm olmayacak. Bu, jQuery 3.0 veya yeni özellikler için destek içerir.


bu güzel bir çözümdür, yapılandırma zengindir, ancak "YYYY / AA / GG" gibi tarih biçimini nereden ayarlayacağımı bulamıyorum
Pavel Niedoba

14
IE 11'de bu jsfiddle'ı çalıştırmayı denediğimde "erişim reddedildi" hatası alıyorum ve tarih seçici çalışmıyor.
Shavais

4
Bu IE10 üzerinde çalışmaz ... iShavais tarafından belirtilenle aynı hatayı alıyorum ... çalışmasını sağlamak için jquery sürümünü 1.11 veya üstüne yükseltin ... bu bağlantıyı
Nitin

2
Ne yazık ki, yazarın sitesinde bilgilendirildiği gibi, gelecek Jquery 3'e webshims desteği yapılmayacak. Bu şekilde, iyi ve eski Jquery kullanıcı arayüzüne güvenirim.
marionmaiden

1
Bu kesinlikle firefox'ta çalışıyor. Ancak IE'de çalışmadı
Varuni NR

27

Sürüm 51'den (26 Ocak 2017) beri Firefox'ta, ancak varsayılan olarak etkin değil (henüz)

Etkinleştirmek için:

about: config

dom.forms.datetime -> true olarak ayarla

https://developer.mozilla.org/en-US/Firefox/Experimental_features


Bunu duyduğuma sevindim. Varsayılan olarak imo açık olmalıdır. Ama bunu bilmek güzel.
Solomon Closson

FF 64.0.2 kullanıyorum, ancak bu seçenek "true" (on) çalışmıyor olsa da, datetime kutusu hala sadece metindir. Ben de hiçbir başarı ile "kronometre" etkinleştirmeye çalışın.
Wasted_Coder

20

JQuery tarafından sağlanan datePicker bileşenini kullanarak bu kısıtlamadan kurtulmanın basit bir yolu vardır .

  1. JQuery ve jQuery UI kitaplıklarını dahil et (Hala eskisini kullanıyorum)

    • src = "js / jquery-1.7.2.js"
    • src = "js / jquery-ui-1.7.2.js"
  2. Aşağıdaki alıntıyı kullanın

    $(function() {
         $( "#id_of_the_component" ).datepicker({ dateFormat: 'yy-mm-dd'}); 
    });

Bkz. JQuery UI DatePicker - Gerekirse Tarih Biçimini Değiştir .


8
OP "eklemeden çalışıyor, başka bir .js dosyası (yani jQueryUI DatePicker Widget)" diyor ... ancak bu soru google'ın en önemli isabetidir, bu yüzden sorunuzu cevaplamamasına rağmen cevabınız hala ÇOK yararlıdır. Keşke şimdi yayınınızı yükseltmek için kötü hissetmem gerekmiyordu.
phil294

2
Takvimi düzgün bir şekilde göstermek için jQuery UI CSS'yi de eklemeniz gerekir. <br> <link rel = "stil sayfası" href = "// code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
YuAn Shaolin Maculelê Lai

16

Type = "date" bu noktada gerçek bir şartname değildir. Bu, Google'ın ortaya koyduğu bir kavramdır ve teknik özelliklerinde (resmi değil) bulunur ve yalnızca Chrome tarafından kısmen desteklenir.

http://caniuse.com/#search=date

Bu noktada bu girdi türüne güvenmem. Sahip olmak güzel olurdu, ama bunu gerçekten yapmasını öngörmüyorum. # 1 nedeni, biraz karmaşık bir giriş için en iyi kullanıcı arayüzünü belirlemek için tarayıcıya çok fazla yük getirmesidir. Duyarlı bir perspektiften düşünün, satıcılardan herhangi biri 400 piksel, 800 piksel ve 1200 piksel genişliğindeki kullanıcı arayüzünüzle neyin en iyi çalışacağını nasıl bilebilir?


138
Kabul etmiyorum, tarayıcılar bunu anlayacak kadar akıllı olmalı. Gerçekten orada tarih seçiciler kullanarak ve onları güncel tutmak zorunda yorgun.
SuperUberDuper

49
Garip akıl yürütme. Tarayıcılar için çok fazla yük, ancak joe web geliştiricisi için değil mi?!?
jeroenh

35
Artık HTML 5 çalışma taslağının bir parçası: w3.org/html/wg/drafts/html/master/…
Chris

7
Ben de her yeni girdi türü için memnunum. Daha hızlı tanımlanırlar ve doğaldırlar, bu da genellikle hızlı anlamına gelir.
Tomáš Zato - Monica'yı eski durumuna döndür

5
@MM Teşekkürler. HTML 5 bu arada resmi bir W3C önerisine yükseltildi. Yeni bağlantı w3.org/TR/2014/REC-html5-20141028/…
Chris

9

İşte tarih YYYY-AA-GG olarak biçimlendirilmiş tam bir örnek

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script> 
<script src="//cdn.jsdelivr.net/webshim/1.14.5/polyfiller.js"></script>
<script>
webshims.setOptions('forms-ext', {types: 'date'});
webshims.polyfill('forms forms-ext');
$.webshims.formcfg = {
en: {
    dFormat: '-',
    dateSigns: '-',
    patterns: {
        d: "yy-mm-dd"
    }
}
};
</script>
<input type="date" />

1
Bunun da bir zaman seçici ekleme seçeneğine izin verip vermediğini bilen var mı?
drooh

Komut dosyanızı JSFiddle @Drooh'da denedim ama çalışmıyor. Her tarih seçtiğimde, giriş alanında bir milisaniye gibi görünür ve sonra kaybolur. Birisi tarih yapılandırması gg / aa / yyyy ile çalışan bir keman sürümü sağlayabilir mi?
Ryan Coolwebs

Ağustos 2016'dan itibaren webshim jQuery 3 ile çalışmaz ve testlerimde 2.2.4 ile de çalışmaz.
drooh

Firefox tarih girişi
ekleyene

4

Bu, bir tarih seçici kullanıcı arayüzü almanıza izin vermese de, Mozilla desen kullanımına izin verir, böylece en azından böyle bir şeyle tarih doğrulaması alabilirsiniz:

pattern='(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))'

Nihayetinde @SuperUberDuper'e katılıyorum, çünkü Mozilla bunu doğal olarak dahil etmenin çok gerisinde.


1
"zaman" için bir sürüm var mı?
Malcolm Salvador

1
Lütfen bu örneği genişletin. Bu giriş için bir html özelliği mi?
Wasted_Coder

3

Bu sadece Dax'ın cevabını takip eden bir öneri. (Bu cevaba bir yorumda yazardım, ancak başkalarının soruları hakkında yorum yapmak için henüz yeterli üne sahip değilim).

Kimlikler her alan için benzersiz olmalıdır, bu nedenle formunuzda (veya formlarınızda) birden çok tarih alanınız varsa, kimlik yerine sınıf öğesini kullanabilirsiniz:

 $(function() { $( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' }); });

ve girdiniz:

 <input type="text" class="datepicker" name="your-name" />

Şimdi, tarih seçiciye her ihtiyacınız olduğunda, o sınıfı eklemeniz yeterlidir. PS biliyorum, hala js :( kullanmak zorunda, ama en azından tüm siteniz için hazırsınız.


3

Firefox'un en son sürümü firefox 57 (Quantum), 14 Kasım 2017'de yayınlandığı tarihi ve diğer özellikleri desteklemektedir. Bu bağlantıyı tıklayarak indirebilirsiniz.


0

Teşekkürler Alexander, en lang için formatı değiştirmenin bir yolunu buldum. (Hangi dilin bu biçimi kullandığını bilmiyordum)

 $.webshims.formcfg = {
        en: {
            dFormat: '/',
            dateSigns: '/',
            patterns: {
                d: "yy/mm/dd"
            }
        }
     };

 $.webshims.activeLang('en');

Bence bu formatı kullanan tek 'en' ülke Kanada. Her durumda, 'en' belirsizdir, çünkü aynı zamanda 'özel' bir tarih formatına sahip olan Amerika Birleşik Devletleri'ni de içerir.
Michael Scheper

Benim durumumda, istemci iş istasyonlarında farklılık gösterebilecek herhangi bir istemci yerel ayarı için tarih biçimini geçersiz kılmakla ilgilidir. Ancak belirli bir sayfada bu tarih biçimini kullanmak istiyorum (kopyala yapıştır nedeni için). Bu daha çok Alexander Farkas cevabı için yorum gibi ama ayrı bir cevap olarak koydum çünkü yorumda kod yapıştıramam Bunu bir yıldan fazla bir süredir üretim ortamında kullanıyorum.
Pavel Niedoba

Dikkatli ol. Webshims, yerel ayarın tarayıcı yorumuna dayanıyorsa, öngörülemeyen sonuçlarınız olabilir. 'en' muhtemelen farklı platformlarda (sistem yerel ayarına bağlı olarak) ve hatta farklı tarayıcılarda aynı format anlamına gelmez. Kanada'daki bir tarayıcı tarafından 'en-ca' olarak yorumlanabilir (büyük olasılıkla yyyy-aa-gg'dir, ancak muhtemelen tutarlı değildir), ancak Hindistan'daki bir tarayıcı tarafından 'en-in' olarak yorumlanabilir (dünyanın çoğu gibi , gg-aa-yyyy üretir). Üretim kodunda olması, düzgün bir şekilde test edildiği anlamına gelmez - büyük sitelerde bile üretim kodunda çok fazla i18n hatası var.
Michael Scheper

Son satır $ .webshims.activeLang ('en'); lang'yi (veya yerel ayarı) tarayıcı ayarlarını geçersiz kılan webshims'e zorlamalı, böylece biçim her zaman aynıdır.
Pavel Niedoba

0

Bazen projenizde Datepicker http://jqueryui.com/datepicker/ kullanmak istemezsiniz çünkü:

  • Jquery kullanmak istemiyorsunuz
  • Projenizde jquery sürümleri çakışması
  • Yılın seçimi uygun değil. Örneğin, 10 yıl öncesine geçmek için önceki düğmeye 120 kez tıklamanız gerekiyor.

Tarih girişi için lütfen çok basit çapraz tarayıcı koduma bakın. Kodum yalnızca tarayıcınız tarih türü girişini desteklemiyorsa geçerlidir

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Date field</h1>
    Date:
    <input type='date' id='date' />
    New date: <span id="NewDate"></span>
    <script>
        CreateDateFilter('date', {
                formatMessage: 'Please type date %s'
                , onblur: function (target) {
                    if (target.value == target.defaultValue)
                        return;
                    document.getElementById('NewDate').innerHTML = target.value;
                }
                , min: new Date((new Date().getFullYear() - 10).toString()).toISOString().match(/^(.*)T.*$/i)[1]//'2006-06-27'//10 years ago
                , max: new Date().toISOString().match(/^(.*)T.*$/i)[1]//"2016-06-27" //Current date
                , dateLimitMessage: 'Please type date between "%min" and "%max"'
            }
        );
    </script>

</body>
</html>


3
Bu kod tamamen başarısız olur. Alan zaten "YYY-AA-GG" ile dolu olduğu için bir tarih yazamıyorum ve temizlemeye çalışırsam yeniden belirir.
Stephen R

Lütfen kısa çizgileri silmeyin. Windows 10 Google Chrome 52, Firefox 41, Opera 39, Microsoft Edge, IE 11'de başarıyla test ettim.Lütfen bana cihazınızı, işletim sisteminizi ve tarayıcınızı bildirin.
Andrej

Aslında yorumunuzun hemen altındaki "Kod Parçacığını Çalıştır" bağlantısına tıklıyorum. Doğru bir tarih yazamıyorum çünkü "YYYY-AA-GG" yer tutucusu yazmaya başladığımda kaybolmak yerine aktif olarak benimle rekabet ediyor. Windows 10'da en son Firefox'u kullanıyorum
Stephen R

1
harici JS dosyaları eklememe koşulunu ihlal ettiği için soruya cevap vermez ve aslında kodun kullanımı tamamen sezgisel değildir. yerel tarih biçimi olmasa bile ISO biçimini zorlar, giriş maskesi yeniden göründüğü için yeni bir tarih yazamaz, maske olarak değil, kutudaki gerçek metnin üzerine maske yazması gerektiğinden, yeni bir tarih yazamaz siz yazın. regex doğrulaması ile standart bir girdiden daha iyi değil
MikeT



-1

bootstrap-datepickerTakvimin Firefox 55 Portable'da çalışmasını sağlamak için eklenti kullanmak zorunda kaldım :

https://bootstrap-datepicker.readthedocs.io/en/latest/

Bootstrap v2 ve v3 ile uyumludur. Bağımsız bir stil sayfası ile birlikte gelir, böylece Bootstrap'e bağımlı olmanız gerekmez.

Kullanımı:

<input class="datepicker">

$('.datepicker').datepicker({
    format: 'mm/dd/yyyy'
});

-2
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Datepicker - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script>
  $(function() {
    $( "#datepicker" ).datepicker();
  });
  </script>
</head>
<body>

<p>Date: <input type="text" id="datepicker"></p>


</body>
</html>
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.