2013-03-20 75 views
20

當瀏覽器不支持該字段時,我使用<input type="date">字段,它們優雅地回退到jQuery。相對最近,Chrome開始提供本地日期選擇器,這非常棒。但是我發現很多用戶錯過了帶有日曆的小箭頭,因此錯過了日期選擇的簡單日曆。在Chrome中顯示本機日期選擇器的方法

Chrome Native Date Picker

爲了使這個更直觀,這將是巨大的,如果當用戶移動焦點到輸入或點擊另一個元素(如一個小日曆圖標),我可以彈出本地日期選擇器UI。

有沒有一種方法可以在Chrome中用來觸發datepicker UI?

+0

如果你問我想擺脫那個胡蘿蔔圖標,那麼我認爲這是不可能的。 – defau1t 2013-03-20 17:49:54

+0

@ defau1t你可以用一些CSS去除箭頭,但我不認爲這是被問到的。儘管更一致,但用戶可以隱藏箭頭並在用戶點擊日曆時觸發本地事件。 – mafafu 2013-03-20 17:53:20

+0

我不知道你可以觸發本地日期選擇器打開,但可能有一個設置來告訴它默認打開? – 2013-03-20 18:06:04

回答

17

我不認爲你可以觸發本地日曆控件來顯示,但你可以高亮顯示多一點:

input[type="date"]:hover::-webkit-calendar-picker-indicator { 
 
    color: red; 
 
} 
 
input[type="date"]:hover:after { 
 
    content: " Date Picker "; 
 
    color: #555; 
 
    padding-right: 5px; 
 
} 
 
input[type="date"]::-webkit-inner-spin-button { 
 
    /* display: none; <- Crashes Chrome on hover */ 
 
    -webkit-appearance: none; 
 
    margin: 0; 
 
}
<input type="date" />

可以,因爲它是,防止它從顯示,例如,從文檔:

您可以通過以下代碼禁用本機日曆選取器:

<style> 
::-webkit-calendar-picker-indicator { 
    display: none; 
} 
</style> 
<input type=date id=dateInput> 
<script> 
dateInput.addEventListener('keydown', function(event) { 
    if (event.keyIdentifier == "Down") { 
     event.preventDefault() 
    } 
}, false); 
</script> 

下面是Webkit的,在那裏我得到的文檔上面:

http://trac.webkit.org/wiki/Styling%20Form%20Controls

也許可以扭轉,並作出顯示日期選擇器,但如果你會問自己每當您將鼠標移動到頁面上時,每個日曆控件都會飛出去?

這個答案也是有幫助的:

https://stackoverflow.com/a/15107073/451969

+0

有辦法做到這一點 - 請參閱我的回答 – 2015-06-17 14:59:07

11

訣竅是火F4的KeyboardEvent輸入元素上:

function openPicker(inputDateElem) { 
    var ev = document.createEvent('KeyboardEvent'); 
    ev.initKeyboardEvent('keydown', true, true, document.defaultView, 'F4', 0); 
    inputDateElem.dispatchEvent(ev); 
} 

var cal = document.querySelector('#cal'); 
cal.focus(); 
openPicker(cal); 

這裏的jsfiddle:http://jsfiddle.net/v2d0vzrr/

BTW, Chrome中有一個有趣的錯誤。如果您在單獨的選項卡中打開jsfiddle,則日曆彈出窗口將顯示在當前選項卡上。 已經是reported

+0

initKeyboardEvent已被棄用,除了使用'initKeyboardEvent'外,是否有上述腳本的替代方案。 – karmendra 2015-11-29 10:54:36

+0

至少在鉻你應該使用 inputDateElem.focus(); 調度前 – bortunac 2016-02-20 13:30:06

+4

這不起作用,至少現在不行了。 MDN狀態 - '注意:手動觸發事件不會生成與該事件相關的默認操作。例如,手動觸發按鍵事件不會導致該字母出現在焦點文本輸入中。對於UI事件,這對於安全原因很重要,因爲它阻止腳本模擬與瀏覽器本身交互的用戶操作。「(https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) – tiblu 2016-11-22 16:04:55

2

我想人們很想經常使用另一個圖標或元素來打開本機日期選擇框。

我想通了,用JavaScript解決方案「點擊()& .focus()」僅工作在WebKit的和其他一些桌面瀏覽器,但不幸的是不能在Firefox

但是,通過將inputField覆蓋在圖標元素(或任何您想使用的)上並通過不透明度0使其變得不可靠,可以通過其他方式實現。

作品上移動設備真的很棒,桌面設備,我建議你添加的onclick事件作爲後備 「$( 'dateInpuBox')。點擊()。對焦()」

.myBeautifulIcon { 
 
     position: relative; 
 
     width: 50px; 
 
    } 
 
    .dateInputBox { 
 
     position: absolute; 
 
     width: 100%; 
 
     height: 100%; 
 
     top: 0; 
 
     left: 0; 
 
     opacity: 0; 
 
    }
<div class="myBeautifulIcon"> 
 
    ICON 
 
    <input class="dateInputBox" type="date" /> 
 
</div>

+0

It works !: $('。dateInpuBox')。click()。focus() – 2016-04-01 19:11:27

2

這裏是觸發日期選擇器,當用戶在該領域本身單擊,因爲電腦盲用戶不知道的方式,他們應該點擊:

input[type="date"] { 
 
    position: relative; 
 
} 
 

 
/* create a new arrow, because we are going to mess up the native one 
 
see "List of symbols" below if you want another, you could also try to add a font-awesome icon.. */ 
 
input[type="date"]:after { 
 
    content: "\25BC"; 
 
    color: #555; 
 
    padding: 0 5px; 
 
} 
 

 
/* change color of symbol on hover */ 
 
input[type="date"]:hover:after { 
 
    color: #bf1400; 
 
} 
 

 
/* make the native arrow invisible and stretch it over the whole field so you can click anywhere in the input field to trigger the native datepicker*/ 
 
input[type="date"]::-webkit-calendar-picker-indicator { 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    width: auto; 
 
    height: auto; 
 
    color: transparent; 
 
    background: transparent; 
 
} 
 

 
/* adjust increase/decrease button */ 
 
input[type="date"]::-webkit-inner-spin-button { 
 
    z-index: 1; 
 
} 
 

 
/* adjust clear button */ 
 
input[type="date"]::-webkit-clear-button { 
 
    z-index: 1; 
 
}
<input type="date">

鏈接:

+0

如果你這樣做,你會失去小上/下按鈕的功能。 – Postlagerkarte 2018-02-09 14:02:27

+0

@Postlagerkarte這就是爲什麼我描述瞭如何讓它們再次在代碼片段下工作。這個片段是爲了給你一個想法,你應該根據自己的需要進行調整。 – Andy 2018-02-16 22:31:32

+0

我調整了代碼片段,以支持清除,上下按鈕。 – Andy 2018-02-16 23:05:08

0

對於桌面(和移動),將輸入與相對定位和圖標一個div,輸入風格如下:

input { 
    position: absolute; 
    opacity: 0; 

    &::-webkit-calendar-picker-indicator { 
    position: absolute; 
    width: 100%; 
    } 
} 

這會將選取器指標延伸到完整的父div上,以便在您點按父div的圖標和/或文本時始終顯示日期控制。