maxlength
属性が で機能していませ<input type="number">
ん。これは Chrome でのみ発生します。
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
maxlength
属性が で機能していませ<input type="number">
ん。これは Chrome でのみ発生します。
<input type="number" class="test_css" maxlength="4" id="flight_number" name="number"/>
type属性の値が、、、、、、またはの場合、この属性は
text
、ユーザーが入力できる最大文字数 (Unicode コード ポイント) を指定します。他のコントロール タイプの場合は無視されます。search
password
tel
url
したがって、設計maxlength
上無視さ<input type="number">
れます。
必要に応じて、彼/彼女の回答で提案されているようにmin
、max
属性を使用できます(注: これは、値の実際の文字長ではなく、制約された範囲のみを定義しますが、-9999 から 9999 はすべての 0-4 をカバーしますpattern
または、通常のテキスト入力を使用して、新しい属性を使用してフィールドに検証を適用できます。
<input type="text" pattern="\d*" maxlength="4">
最大長は、イベントを使用して最大長を制限する<input type="number"
ことを知っている最良の方法では機能しません。oninput
以下のコードをご覧ください。
<input name="somename"
oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
type = "number"
maxlength = "6"
/>
2 つの方法があります。
最初: を使用すると、モバイルのtype="tel"
ようtype="number"
に動作し、maxlength を受け入れます。
<input type="tel" />
2 番目: JavaScript を少し使用します。
<!-- maxlength="2" -->
<input type="tel" onKeyDown="if(this.value.length==2 && event.keyCode!=8) return false;" />
minおよびmax属性を使用できます。
次のコードは同じことを行います。
<input type="number" min="-999" max="9999"/>
長さ制限のある数値入力に対してもこれを試すことができます
<input type="tel" maxlength="4" />
ここにjQueryを使用した私のソリューションがあります...入力にmaxlengthを追加する必要があります type=number
$('body').on('keypress', 'input[type=number][maxlength]', function(event){
var key = event.keyCode || event.charCode;
var charcodestring = String.fromCharCode(event.which);
var txtVal = $(this).val();
var maxlength = $(this).attr('maxlength');
var regex = new RegExp('^[0-9]+$');
// 8 = backspace 46 = Del 13 = Enter 39 = Left 37 = right Tab = 9
if( key == 8 || key == 46 || key == 13 || key == 37 || key == 39 || key == 9 ){
return true;
}
// maxlength allready reached
if(txtVal.length==maxlength){
event.preventDefault();
return false;
}
// pressed key have to be a number
if( !regex.test(charcodestring) ){
event.preventDefault();
return false;
}
return true;
});
コピーと貼り付けを処理します。
$('body').on('paste', 'input[type=number][maxlength]', function(event) {
//catch copy and paste
var ref = $(this);
var regex = new RegExp('^[0-9]+$');
var maxlength = ref.attr('maxlength');
var clipboardData = event.originalEvent.clipboardData.getData('text');
var txtVal = ref.val();//current value
var filteredString = '';
var combined_input = txtVal + clipboardData;//dont forget old data
for (var i = 0; i < combined_input.length; i++) {
if( filteredString.length < maxlength ){
if( regex.test(combined_input[i]) ){
filteredString += combined_input[i];
}
}
}
setTimeout(function(){
ref.val('').val(filteredString)
},100);
});
それが誰かに役立つことを願っています。
私の経験では、無視される理由を尋ねるほとんどの問題はmaxlength
、ユーザーが「許可された」文字数を超えて入力できるためです。
他のコメントが述べているように、type="number"
入力にはmaxlength
属性がなく、代わりにmin
andmax
属性があります。
フォームが送信される前にユーザーがこれを認識できるようにしながら、フィールドに挿入できる文字数を制限するには (ブラウザーは値 > 最大を識別する必要があります)、(少なくとも今のところ) を追加する必要があります。フィールドへのリスナー。
過去に使用したソリューションは次のとおりです。http://codepen.io/wuori/pen/LNyYBM
すでに答えがあることは知っていますが、入力をmaxlength
属性とまったく同じように、またはできるだけ近くに動作させたい場合は、次のコードを使用します。
(function($) {
methods = {
/*
* addMax will take the applied element and add a javascript behavior
* that will set the max length
*/
addMax: function() {
// set variables
var
maxlAttr = $(this).attr("maxlength"),
maxAttR = $(this).attr("max"),
x = 0,
max = "";
// If the element has maxlength apply the code.
if (typeof maxlAttr !== typeof undefined && maxlAttr !== false) {
// create a max equivelant
if (typeof maxlAttr !== typeof undefined && maxlAttr !== false){
while (x < maxlAttr) {
max += "9";
x++;
}
maxAttR = max;
}
// Permissible Keys that can be used while the input has reached maxlength
var keys = [
8, // backspace
9, // tab
13, // enter
46, // delete
37, 39, 38, 40 // arrow keys<^>v
]
// Apply changes to element
$(this)
.attr("max", maxAttR) //add existing max or new max
.keydown(function(event) {
// restrict key press on length reached unless key being used is in keys array or there is highlighted text
if ($(this).val().length == maxlAttr && $.inArray(event.which, keys) == -1 && methods.isTextSelected() == false) return false;
});;
}
},
/*
* isTextSelected returns true if there is a selection on the page.
* This is so that if the user selects text and then presses a number
* it will behave as normal by replacing the selection with the value
* of the key pressed.
*/
isTextSelected: function() {
// set text variable
text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return (text.length > 0);
}
};
$.maxlengthNumber = function(){
// Get all number inputs that have maxlength
methods.addMax.call($("input[type=number]"));
}
})($)
// Apply it:
$.maxlengthNumber();
Chrome (技術的には、Blink)は maxlength for を実装しません<input type="number">
。
HTML5 仕様によると、maxlength は text、url、e-mail、search、tel、および password のタイプにのみ適用されます。
以下のコードにより、ユーザーは次のことができるようになります。
<input type="number" name="test_name" min="0" max="999" oninput="validity.valid||(value='');">