Html5フォームに関する話題はすべてあるものの、ほとんどのシナリオでは、この方法で追加の作業を作成しているようです。
たとえば、datepickerフィールドを見てみましょう。これのネイティブhtml5実装は、すべてのブラウザーで異なるレンダリングを行います。さらに、この機能をサポートしていないブラウザの場合、ポリフィルソリューション(jquery UIなど)でも異なるレンダリングが行われます。
これで、jqueryを使用して完全に機能する統合されたソリューションが得られたときに、同じフォームにカスタマイズとメンテナンスの複数のポイントが導入されました。
私はこの領域でのいくつかの実世界の経験について聞きたいです。なぜなら、私はすべての話題に悩まされているからです!
まず第一に、私は webshims lib の作成者です(これらのポリフィルの1つであり、もう維持されません)。あなたの質問に答えるには:
いいえ、1つのプロジェクトだけでこれを実行するのは非常に困難です。まあ、私はそれをしました、なぜなら私が現代の技術を使いたいからです。
そのとおり!そしてここに理由があります:
Webshimsを含め、次のスクリプトを作成した後:
//polyfill forms (constraint validation) and forms-ext (date, range etc.)
$.webshims.polyfill('forms forms-ext');
ウィジェットと制約をフォームに書き込むだけです。
<input type="date" />
<input type="date" min="2012-10-11" max="2111-01-01" />
<input type="range" disabled />
<input type="email" required placeholder="Yo you can use a placeholder" />
これにより、3つの異なるウィジェットが作成され、それぞれが異なる構成になります。標準化されたクリーンで無駄のないコードだけで、追加のJSは必要ありません。
DOM APIについても同様です。 2つの日付フィールドを組み合わせる および 範囲フィールドと日付フィールドを組み合わせる の2つの例を示します。
古いブラウザでは正常に機能が低下し、最新のブラウザでは適切に機能します。
特にモバイルに最適(iOS 5、Blackberryは日付などをサポートしています)
より優れたモバイルUX(タッチのためのより良い入力UI、より良いパフォーマンス、システムに適合)、それを使用している場合: type = "email" 、 type = "number" および type = "date"/type = "range"
私はより大きなエージェンシーの開発者です。あなたは絶対的に正しいほとんどのクライアントであり、ほとんどのデザイナーはそれほどの違いを許容しませんが、私は現代のテクノロジーを使いたいと思っています。
ポリフィリングパーツ
//polyfill constraint validation
$.webshims.polyfill('forms');
エラーバブルのUIのカスタマイズ:
//on DOM-ready
$(function(){
$('form').bind('firstinvalid', function(e){
//show the invalid alert for first invalid element
$.webshims.validityAlert.showFor( e.target );
//prevent browser from showing native validation message
return false;
});
});
次のマークアップを生成します。
<!-- the JS code above will generate the following custom styleable HTML markup for the validation alert -->
<span class="validity-alert-wrapper" role="alert">
<span class="validity-alert">
<span class="va-arrow"><span class="va-arrow-box"></span></span>
<span class="va-box">Error message of the current field</span>
</span>
</span>
無効/有効なフォームフィールドのスタイルのカスタマイズ:
.form-ui-invalid {
border-color: red;
}
.form-ui-valid {
border-color: green;
}
妥当性アラートのテキストのカスタマイズ:
<input required data-errormessage="Hey this is required!!!" />
そして今、ポイントは何ですか:
問題ない:
//configure webshims to use customizable widget UI in all browsers
$.webshims.setOptions('forms-ext', {
replaceUI: true
});
$.webshims.polyfill('forms forms-ext');
そしてここにも:
そして今、ここに最高のものがあります:
//configure webshims to use customizable widget UI in all non mobile browsers, but a customizable one in all desktop and all non-capable mobile browsers
$.webshims.setOptions('forms-ext', {
//oh, I know this is bad browser sniffing :-(
replaceUI: !(/mobile|ipad|iphone|fennec|Android/i.test(navigator.userAgent))
});
$.webshims.polyfill('forms forms-ext');
Alexanderのwebshimsの回答をサポートするために、UX、UI、およびフロントエンドの観点から、HTML5入力のクロスブラウザー動作についてかなりの調査を行いました。私の結論は、デバイスやブラウザ全体で動作を優先させる唯一の方法は、ウェブシムのようなポリフィルを使用することであるということです。これの多くは、日付のバレルローラーや数字のテンキーなどのデバイスでネイティブ機能を利用できず、それらの機能を実装していないデスクトップブラウザーをサポートする方法がないことに関係しています。
ここでは、さまざまなネイティブ実装と一般的なプラグインでの日付入力の動作の分析を示します。
日付入力分析-Googleスプレッドシート
(webshimsがすべての実装からどのようにして最高を得るかを見ることができます)
以下は、一般的なブラウザ間で実際の入力タイプがネイティブに、またWebshimフォールバックでどのように動作するかの分析です。
webshimフォールバックを使用したHTML5入力のUX分析-Googleスプレッドシート
以下は、これらの入力を分析するために使用されるデモページです。
HTML5入力ページのデモ-CodePen
ストレートjquery UIを使用する代わりにポリフィルレイヤーを通過する価値がある場合、私も懐疑的でした。 webshims libとHTML5を使用した後、すぐに、はるかに少ないjavascriptコードがあることがわかりました。検証プラグインはもう必要ありません。この素晴らしいポリフィル、webshims libを作成してサポートしてくれたAlexanderに感謝します。これは、フォームの送信クリックでajax呼び出しを行う例です。
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
<script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js" type="text/javascript"></script>
<script>
// set options for html5shiv
if(!window.html5){
window.html5 = {};
}
window.html5.shivMethods = false;
</script>
<script src="webshims/js-webshim/minified/extras/modernizr-custom.js"></script>
<script src="webshims/js-webshim/minified/polyfiller.js"></script>
<script class="example">
$.webshims.setOptions({
//we do not use any DOM-/JS-APIs on DOM-ready, so we do not need to delay the ready event <- good against fouc
waitReady: false
});
//load all polyfill features
$.webshims.polyfill('forms forms-ext');
</script>
<script type="text/javascript">
$(function(){
var frm = $('#tstForm');
frm.submit(function () {
var someDate=$('#someDate').val();
alert('someDate:'+someDate);
// you can make your ajax call here.
return false;
});
});
</script>
</head>
<body>
<form id="tstForm">
Some Date:<input id="someDate" name="someDate" type="date" min="2013-01-01" max="2013-06-01" ></input>
Full Name:<input id="fullName" name="fullName" type="text" required></input>
Age:<input id="age" name="age" type="number" required min="18" max="120"></input>
<input type="submit" value="Submit"/>
</form>
</body>
</html>