回答:
以下からの用MDNのドキュメント<input>
値ならばタイプ属性である
text
、search
、password
、tel
、又はurl
、この属性は、ユーザが入力することができる(Unicodeコードポイントで)文字の最大数を指定します。他の制御タイプの場合は無視されます。
したがって、設計maxlength
上無視さ<input type="number">
れます。
必要に応じて、回答で提案されているinonのようにmin
and max
属性を使用できます(注:これは、値の実際の文字長ではなく、制限された範囲のみを定義しますが、-9999から9999はすべて0-4をカバーします数字)、または通常のテキスト入力を使用して、新しい属性でフィールドの検証を強制できます。pattern
<input type="text" pattern="\d*" maxlength="4">
type=number
を設定して「キーボード入力」の物理的な長さを入力に制限することはできませんmax
。この属性は、入力のスピナーによって選択された数のみを制限します。
\d*
ここは何ですか?
regex
パターンの使用は非常にクリエイティブです。しかし、モバイル変わらないでAndroid
かiOS
、それはだtext
、それが悪いの原因となるので、入力UX
。
最大長は<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"
/>
||0/1
oninput="this.value=this.value.slice(0,this.maxLength)"
動作するはずです
多くの人onKeyDown()
がまったく機能しないイベントを投稿しました。つまり、制限に達すると削除できません。したがって、onKeyDown()
使用する代わりにonKeyPress()
、それは完全に正常に動作します。
以下は作業コードです:
User will not be allowed to enter more than 4 digits
<br>
<input type="number" pattern="/^-?\d+\.?\d*$/" onKeyPress="if(this.value.length==4) return false;" />
number
私はあなたがそれをするための2つの方法を持っています
まずtype="tel"
、を使用します。これはtype="number"
モバイルと同じように機能し、maxlengthを受け入れます。
<input type="tel" />
次に、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"/>
9999
、ユーザーがその長さを超える数を手動で入力できる数を超えることはできません。
入力タイプをテキストに変更し、「oninput」イベントを使用して関数を呼び出します。
<input type="text" oninput="numberOnly(this.id);" class="test_css" maxlength="4" id="flight_number" name="number"/>
JavaScript正規表現を使用してユーザー入力をフィルタリングし、数値のみに制限します。
function numberOnly(id) {
// Get element by id which passed as parameter within HTML element event
var element = document.getElementById(id);
// Use numbers only pattern, from 0 to 9
var regex = /[^0-9]/gi;
// This removes any other character but numbers as entered by user
element.value = element.value.replace(regex, "");
}
長さ制限のある数値入力でもこれを試すことができます
<input type="tel" maxlength="4" />
tel
入力自体が自動的に検証され、一部の奇妙なケースでは、先頭0
のがに変更され1
ます。
<input type="number" oninput="this.value = this.value.replace(/[^0-9.]/g, ''); this.value = this.value.replace(/(\..*)\./g, '$1');" onKeyDown="if(this.value.length==10 && event.keyCode!=8) return false;">
これがjQueryを使用した私の解決策です...あなたは入力type = numberにmaxlengthを追加する必要があります
$('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);
});
誰かのお役に立てば幸いです。
this.value = this.value.slice(0, this.maxLength);
だと思います。これには問題があると思いますか?私は今のところ見つけていません。貼り付けたテキストもカバーします。
私の経験でmaxlength
は、無視される理由を尋ねられるほとんどの問題は、ユーザーが「許可された」文字数より多くの文字を入力できるためです。
他のコメントで述べたように、type="number"
入力にはmaxlength
属性がなく、代わりにmin
and max
属性があります。
フォームが送信される前にユーザーがこれを認識できるようにしながら、挿入できる文字数をフィールドで制限するには(ブラウザーは値> maxを識別する必要があります)、(現時点では少なくとも)追加する必要があります。フィールドのリスナー。
これは私が過去に使用したソリューションです: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();
私が最近試した絶対的な解決策は次のとおりです。
<input class="class-name" placeholder="1234567" name="elementname" type="text" maxlength="4" onkeypress="return (event.charCode == 8 || event.charCode == 0 || event.charCode == 13) ? null : event.charCode >= 48 && event.charCode <= 57" />
これをすばやく簡単に理解できるようにします。
maxlengthの代わりにtype='number'
(maxlengthは、text
タイプ内の文字列の最大文字数を定義することを意味します)、min=''
およびを使用しmax=''
ます。
乾杯
<input type="number">
それだけです...数値入力(ただし、文字列からJavascriptを介して浮動小数点に変換されません)。
私の推測では、キー入力時の文字を制限していません。そうでない場合maxLength
、ユーザーが最初に小数を忘れた場合に「キートラップ」でスタックする可能性があります(「maxLength」属性にすでに達しているときに.
atインデックスを配置してみてください)。ただし、属性を設定すると、フォームの送信時に検証されます。1
<input type"text">
max
電話番号を制限または検証する場合は、type="tel"
attr / valueを使用します。これはmaxLength
attr に従い、携帯電話の数字キーボードのみを表示し(最新のブラウザ)、パターンへの入力を制限できます(つまりpattern="[0-9]{10}"
)。
maxlenght-入力タイプのテキスト
<input type="email" name="email" maxlength="50">
jQueryを使用:
$("input").attr("maxlength", 50)
maxlenght-入力タイプ番号
JS
function limit(element, max) {
var max_chars = max;
if(element.value.length > max_chars) {
element.value = element.value.substr(0, max_chars);
}
}
HTML
<input type="number" name="telefono" onkeydown="limit(this, 20);" onkeyup="limit(this, 20);">
type="number"
、これはHTML 5仕様の新しいタイプです。あなたがテストしているブラウザが認識しない場合はtype="number"
、それを扱うようtype="text"
いるん尊重maxlength
属性を。これは、表示されている動作を説明している可能性があります。