HTML5 요소 입력 속성으로 작업 중이며 Google 크롬 만 날짜, 시간 속성을 지원합니다. Modernizr를 시도 했지만 내 웹 사이트에 통합하는 방법을 이해할 수 없습니다 (코드화 방법 / 구문 / 포함 사항). 모든 브라우저에서 날짜, 시간 속성을 사용하는 방법에 대한 코드 스 니펫.
HTML5 요소 입력 속성으로 작업 중이며 Google 크롬 만 날짜, 시간 속성을 지원합니다. Modernizr를 시도 했지만 내 웹 사이트에 통합하는 방법을 이해할 수 없습니다 (코드화 방법 / 구문 / 포함 사항). 모든 브라우저에서 날짜, 시간 속성을 사용하는 방법에 대한 코드 스 니펫.
답변:
입력 유형 date
을 지원하지 않는 브라우저 는 기본적으로 표준 유형 인으로 설정 text
되므로 유형 속성 (속성이 아님) 을 확인하기 date
만하면됩니다. 그렇지 않은 경우 브라우저에서 날짜 입력을 지원하지 않습니다. 자신 만의 datepicker를 추가합니다.
if ( $('[type="date"]').prop('type') != 'date' ) {
$('[type="date"]').datepicker();
}
물론 원하는 datepicker를 사용할 수 있습니다. jQuery UI의 datepicker는 아마도 가장 일반적으로 사용되는 것일 수 있지만 UI 라이브러리를 다른 용도로 사용하지 않는 경우 자바 스크립트를 상당히 추가하지만 수백 개의 대체 datepicker가 있습니다. 에서 고르다.
type
속성은 결코 브라우저는 기본에 다시 떨어질 것, 변하지 않는 text
하나의 속성을 확인하는, 그래서 속성 유형입니다.
위의 예 에서처럼 속성은 여전히 선택기로 사용할 수 있습니다.
$('input').prop('type') != 'date'
Modernizr는 새로운 HTML5 입력 유형이 처리되는 방식에 대해 실제로 변경하지 않습니다. 그것은 기능의 검출 하지 심 (제외한 <header>
, <article>
등이 유사한 블록 요소로 취급 할 수있는 심 <div>
).
을 사용하려면 자신의 스크립트 <input type='date'>
를 확인 Modernizr.inputtypes.date
하고 false이면 날짜 선택기를 제공하는 다른 플러그인을 켜야합니다. 선택할 수있는 수천 가지가 있습니다. Modernizr는 시작할 곳을 제공 할 수있는 폴리 필 목록을 완전하지 않게 유지 합니다 . 또는 그냥 놓아 둘 수 있습니다. 모든 브라우저 text
는 인식 할 수없는 입력 유형이 표시 될 때 되돌아가 므로 최악의 경우 사용자가 날짜를 입력해야합니다. (플레이스 홀더를 제공하거나 jQuery.maskedinput과 같은 것을 사용하여 추적 할 수 있습니다.)
Modernizr 예제를 요청 했으므로 여기에 있습니다. 이 코드는 Modernizr를 사용하여 '날짜'입력 유형이 지원되는지 여부를 감지합니다. 지원되지 않는 경우 JQueryUI datepicker로 실패합니다.
참고 : JQueryUI를 다운로드하고 자신의 코드에서 CSS 및 JS 파일의 경로를 변경해야합니다.
<!DOCTYPE html>
<html>
<head>
<title>Modernizer Detect 'date' input type</title>
<link rel="stylesheet" type="text/css" href="jquery-ui-1.10.3/themes/base/jquery.ui.all.css"/>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-1.7-development-only.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.datepicker.js"></script>
<script type="text/javascript">
$(function(){
if(!Modernizr.inputtypes.date) {
console.log("The 'date' input type is not supported, so using JQueryUI datepicker instead.");
$("#theDate").datepicker();
}
});
</script>
</head>
<body>
<form>
<input id="theDate" type="date"/>
</form>
</body>
</html>
이것이 당신에게 효과가 있기를 바랍니다.
<script>
var datefield = document.createElement("input")
datefield.setAttribute("type", "date")
if (datefield.type != "date") { // if browser doesn't support input type="date", load files for jQuery UI Date Picker
document.write('<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />\n')
document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"><\/script>\n')
document.write('<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"><\/script>\n')
}
</script>
<script>
if (datefield.type != "date") { // if browser doesn't support input type="date", initialize date picker widget:
jQuery(function($) { // on document.ready
$('#birthday').datepicker();
}); <- missing semicolon
}
</script>
<body>
<form>
<b>Date of birth:</b>
<input type="date" id="birthday" name="birthday" size="20">
<input type="button" value="Submit" name="B1">
</form>
</body>
그냥 사용 <script src="modernizr.js"></script>
에<head>
섹션 하면 스크립트가 두 경우를 구분하는 데 도움이되는 클래스를 추가합니다. 현재 브라우저에서 지원하는지 또는 지원하지 않는지 여부입니다.
또한이 스레드에 게시 된 링크를 따르십시오. 그것은 당신을 도울 것입니다 : Firefox 및 Internet Explorer에서 HTML5 입력 유형 날짜, 색상, 범위 지원
내가 찾은 가장 쉽고 작동하는 솔루션은 다음 브라우저에서 작업하는 것입니다.
원정 여행
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<h2>Poly Filler Script for Date/Time</h2>
<form method="post" action="">
<input type="date" />
<br/><br/>
<input type="time" />
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script>
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script>
<script>
webshims.setOptions('waitReady', false);
webshims.setOptions('forms-ext', {type: 'date'});
webshims.setOptions('forms-ext', {type: 'time'});
webshims.polyfill('forms forms-ext');
</script>
</body>
</html>
그냥 포함 낫 돔 과 더 나은-Dateinput - Polyfill을 스크립트 섹션에.
다음은 데모입니다 :
http://chemerisuk.github.io/better-dateinput-polyfill/
영국 dd / mm / yyyy 형식을 유지하면서 문제가 발생했습니다. 처음에는 adeneo https://stackoverflow.com/a/18021130/243905 의 답변을 사용 했지만 사파리에서 작동하지 않아서 이렇게 변경되었습니다. 내가 알 수있는 한 jquery-ui datepicker, jquery 유효성 검사를 사용하여 전체적으로 작동합니다.
if ($('[type="date"]').prop('type') !== 'date') {
//for reloading/displaying the ISO format back into input again
var val = $('[type="date"]').each(function () {
var val = $(this).val();
if (val !== undefined && val.indexOf('-') > 0) {
var arr = val.split('-');
$(this).val(arr[2] + '/' + arr[1] + '/' + arr[0]);
}
});
//add in the datepicker
$('[type="date"]').datepicker(datapickeroptions);
//stops the invalid date when validated in safari
jQuery.validator.methods["date"] = function (value, element) {
var shortDateFormat = "dd/mm/yy";
var res = true;
try {
$.datepicker.parseDate(shortDateFormat, value);
} catch (error) {
res = false;
}
return res;
}
}
<html>
<head>
<title>Date picker works for all browsers(IE, Firefox, Chrome)</title>
<script>
var datefield = document.createElement("input")
datefield.setAttribute("type", "date")
if (datefield.type != "date") { // if browser doesn't support input type="date", load files for jQuery UI Date Picker
document.write('<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />\n')
document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"><\/script>\n')
document.write('<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"><\/script>\n')
}
</script>
<script>
if (datefield.type != "date") { // if browser doesn't support input type="date", initialize date picker widget:
jQuery(function($) { // on document.ready
$('#start_date').datepicker({
dateFormat: 'yy-mm-dd'
});
$('#end_date').datepicker({
dateFormat: 'yy-mm-dd'
});
})
}
</script>
</head>
<body>
<input name="start_date" id="start_date" type="date" required>
<input name="end_date" id="end_date" required>
</body>
</html>