SQLの窓

2014年11月20日


INPUT type="number" の振る舞いをブラウザ間で調整する

Google Chrome と Firefox ではスピンボタンが実装されていますが、IE では何もありません。この違いは、jQuery の spinner で吸収するのですが、IE のバージョンによって input[type=number] というセレクタが使え無いので、バージョン毎の対応が必要でした。

さらに、IE で HTML5 による入力チェックが働くのは、IE10 以降なのですが、type="number" で 数字以外を入力すると、チェックされずに空文字列がサーバーに送られてしまいます。ですから、type="text" で pattern 属性で同様の対応をしています。

また、逆にスピンボタンを必要としない場合は、Google Chrome と Firefox で非表示にする必要がありますが、その場合は CSS で、ブラウザ毎に対応します。

Google Chrome : -webkit-appearance: none;
Firefox : -moz-appearance: textfield;



▼ デモページの表示イメージ

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>
<script type="text/javascript">
var userAgent = window.navigator.userAgent.toLowerCase();
var appVersion = window.navigator.appVersion.toLowerCase();
$(function(){

	var target = null;

	if ( userAgent.indexOf("msie") > -1 ) {
		if (appVersion.indexOf("msie 10.0") > -1) {
			target = $( "input[type=number].num_b" ).spinner()
			target.attr( "type", "text" );
			target.attr( "pattern", "^[0-9]+$" );
			target = $( "input[type=number].num_a" )
			target.attr( "type", "text" );
			target.attr( "pattern", "^[0-9]+$" );
			$("#title").text("今ブラウザは IE 10です");
		}
		else {
			target = $( "#ie9" ).spinner()
			$("#title").text("今ブラウザは IE 9 以前です");
		}
	}
	else {
		if ( userAgent.indexOf("trident/7.0") > -1 ) {
			target = $( "input[type=number].num_b" ).spinner()
			target.attr( "type", "text" );
			target.attr( "pattern", "^[0-9]+$" );
			target = $( "input[type=number].num_a" )
			target.attr( "type", "text" );
			target.attr( "pattern", "^[0-9]+$" );

			$("#title").text("今ブラウザは IE 11です");
		}
		else if (userAgent.indexOf("firefox") > -1) {
			$("#title").text("今ブラウザは Firefox です");
		}
		else if (userAgent.indexOf("opera") > -1) {
			$("#title").text("今ブラウザは Opera です");
		}
		else if (userAgent.indexOf("chrome") > -1) {
			$("#title").text("今ブラウザは Google Chrome です");
		}
		else if (userAgent.indexOf("safari") > -1) {
			$("#title").text("今ブラウザは Safari です");
		}
		else {
			$("#title").text("今ブラウザは 不明なブラウザ です");
		}
	}

	if ( target != null ) {
		target.css({"width":"300px" });
	}

});

</script>

<style type="text/css">
input[type="number"].num_a::-webkit-outer-spin-button, 
input[type="number"].num_a::-webkit-inner-spin-button {
	-webkit-appearance: none;
}

input[type=number].num_a {
	-moz-appearance: textfield;
}

* {
	font-family: "メイリオ", Meiryo, "MS Pゴシック";
	font-size: 16px;
}

</style>
<h3 id="title" style='margin-bottom:-10px;'></h3>
<form 
	method="get" 
	id="target_form" 
	target="my_ferame" 
	action="http://winofsql.jp/php_get.php" 
	accept-charset="utf-8">
<pre>
<input 
	type="submit" 
	name="send" 
	id="send_check" 
	value="送信">
▼ type="number" でスピンボタンなし
<input
	class="num_a"
	type="number" 
	name="num[]">

▼ type="number" でスピンボタンあり
<input 
	class="num_b" 
	type="number" 
	id="ie9" name="num[]">
</pre>
</form>
<iframe name="my_ferame" frameborder="1" scrolling="yes" width="400" height="200"></iframe>

関連する記事

INPUT type="number" の振る舞いをブラウザ間で調整する jQuery プラグイン

参考

Styling new Chrome number input (spin box) - Stack Overflow

※ 参考ページでは、スピンボタンのカスタマイズについて書かれています(自前のスピンボタンの使用)


【HTML / CSSの最新記事】
posted by lightbox at 2014-11-20 16:21 | HTML / CSS | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり