สำหรับ<input type="number">
องค์ประกอบmaxlength
ไม่ทำงาน ฉันจะ จำกัดmaxlength
องค์ประกอบจำนวนนั้นได้อย่างไร
สำหรับ<input type="number">
องค์ประกอบmaxlength
ไม่ทำงาน ฉันจะ จำกัดmaxlength
องค์ประกอบจำนวนนั้นได้อย่างไร
คำตอบ:
และคุณสามารถเพิ่มแอmax
ททริบิวที่จะระบุจำนวนสูงสุดที่คุณสามารถแทรกได้
<input type="number" max="999" />
หากคุณเพิ่มทั้ง a max
และmin
ค่าคุณสามารถระบุช่วงของค่าที่อนุญาต:
<input type="number" min="1" max="999" />
ด้านบนจะยังคงไม่หยุดให้ผู้ใช้ป้อนค่านอกช่วงที่กำหนดด้วยตนเอง แต่เขาจะแสดงป๊อปอัพบอกให้เขาป้อนค่าภายในช่วงนี้เมื่อส่งแบบฟอร์มตามที่แสดงในภาพหน้าจอนี้:
คุณสามารถระบุmin
และmax
แอตทริบิวต์ซึ่งจะอนุญาตให้ป้อนข้อมูลภายในช่วงที่ระบุเท่านั้น
<!-- equivalent to maxlength=4 -->
<input type="number" min="-9999" max="9999">
อย่างไรก็ตามวิธีนี้ใช้ได้กับปุ่มควบคุมสปินเนอร์เท่านั้น แม้ว่าผู้ใช้อาจพิมพ์ตัวเลขได้มากกว่าที่อนุญาตmax
แต่จะไม่ส่งแบบฟอร์ม
ภาพหน้าจอที่นำมาจาก Chrome 15
คุณสามารถใช้oninput
เหตุการณ์HTML5 ใน JavaScript เพื่อ จำกัด จำนวนอักขระ:
myInput.oninput = function () {
if (this.value.length > 4) {
this.value = this.value.slice(0,4);
}
}
maxlength
.............
หากคุณกำลังมองหาโซลูชันเว็บสำหรับมือถือที่คุณต้องการให้ผู้ใช้ของคุณเห็นแป้นตัวเลขแทนที่จะเป็นคีย์บอร์ดข้อความแบบเต็ม ใช้ type = "tel" มันจะทำงานร่วมกับ maxlength ซึ่งช่วยให้คุณไม่สร้างจาวาสคริปต์พิเศษ
สูงสุดและต่ำสุดจะยังอนุญาตให้ผู้ใช้พิมพ์ตัวเลขเกินจำนวนสูงสุดและต่ำสุดซึ่งไม่เหมาะสม
คุณสามารถรวมสิ่งเหล่านี้ทั้งหมด:
<input name="myinput_drs"
oninput="maxLengthCheck(this)"
type = "number"
maxlength = "3"
min = "1"
max = "999" />
<script>
// This is an old version, for a more recent version look at
// https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
function maxLengthCheck(object)
{
if (object.value.length > object.maxLength)
object.value = object.value.slice(0, object.maxLength)
}
</script>
ปรับปรุง:
นอกจากนี้คุณยังอาจต้องการที่จะป้องกันไม่ให้ตัวละครที่ไม่ใช่ตัวเลขใด ๆ ที่จะเข้ามาเพราะจะเป็นสตริงที่ว่างเปล่าสำหรับปัจจัยการผลิตจำนวนและดังนั้นจึงมีความยาวของมันจะเป็นobject.length
0
ดังนั้นmaxLengthCheck
ฟังก์ชั่นจะไม่ทำงาน
วิธีแก้ไข:
ดูตัวอย่างนี้หรือสิ่งนี้
การสาธิต - ดูรหัสแบบเต็มได้ที่นี่:
http://jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/
อัปเดต 2:นี่คือรหัสอัปเดต: https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
อัปเดต 3: โปรดทราบว่าการอนุญาตให้ป้อนทศนิยมมากกว่าหนึ่งจุดสามารถทำให้ยุ่งเหยิงด้วยค่าตัวเลข
มันง่ายมากด้วยจาวาสคริปต์ที่คุณสามารถจำลองmaxlength
ลองดู:
//maxlength="2"
<input type="number" onKeyDown="if(this.value.length==2) return false;" />
keydown
คือคุณไม่สามารถใช้ backspace ได้สูงสุดอักขระ ปัญหาkeypress
คือคุณสามารถคัดลอก + วางเกินจำนวนอักขระสูงสุด
หรือหากค่าสูงสุดของคุณเป็นเช่น 99 และต่ำสุด 0 คุณสามารถเพิ่มสิ่งนี้ในองค์ประกอบอินพุต (ค่าของคุณจะถูกเขียนใหม่โดยค่าสูงสุดของคุณ ฯลฯ )
<input type="number" min="0" max="99"
onKeyUp="if(this.value>99){this.value='99';}else if(this.value<0){this.value='0';}"
id="yourid">
จากนั้น (ถ้าคุณต้องการ) คุณสามารถตรวจสอบว่าเป็นหมายเลขที่ป้อนจริงหรือไม่
onKeyUp="if(this.value>this.max)this.value=this.max;if(this.value<this.min)this.value=this.min;"
คุณสามารถระบุเป็นข้อความได้ แต่เพิ่ม pettern ที่ตรงกับหมายเลขเท่านั้น:
<input type="text" pattern="\d*" maxlength="2">
มันทำงานได้อย่างสมบูรณ์แบบและบนมือถือ (ทดสอบบน iOS 8 และ Android) จะปรากฏขึ้นแป้นพิมพ์ตัวเลข
pattern
ทำให้เกิดการเน้นการตรวจสอบ
//For Angular I have attached following snippet.
<div ng-app="">
<form>
Enter number: <input type="number" ng-model="number" onKeyPress="if(this.value.length==7) return false;" min="0">
</form>
<h1>You entered: {{number}}</h1>
</div>
หากคุณใช้เหตุการณ์ "onkeypress" คุณจะไม่ได้รับข้อ จำกัด ของผู้ใช้เช่นขณะกำลังพัฒนา (ทดสอบหน่วย) และหากคุณมีข้อกำหนดที่ไม่อนุญาตให้ผู้ใช้ป้อนหลังจากขีด จำกัด เฉพาะลองดูโค้ดนี้แล้วลองอีกครั้ง
อีกทางเลือกหนึ่งคือเพียงเพิ่มฟังสำหรับสิ่งที่มี maxlength คุณลักษณะและเพิ่มค่าชิ้นไปที่ สมมติว่าผู้ใช้ไม่ต้องการใช้ฟังก์ชันภายในทุกเหตุการณ์ที่เกี่ยวข้องกับอินพุต นี่คือข้อมูลโค้ด ไม่ต้องสนใจโค้ด CSS และ HTML, จาวาสคริปต์เป็นสิ่งสำคัญ
// Reusable Function to Enforce MaxLength
function enforce_maxlength(event) {
var t = event.target;
if (t.hasAttribute('maxlength')) {
t.value = t.value.slice(0, t.getAttribute('maxlength'));
}
}
// Global Listener for anything with an maxlength attribute.
// I put the listener on the body, put it on whatever.
document.body.addEventListener('input', enforce_maxlength);
label { margin: 10px; font-size: 16px; display: block }
input { margin: 0 10px 10px; padding: 5px; font-size: 24px; width: 100px }
span { margin: 0 10px 10px; display: block; font-size: 12px; color: #666 }
<label for="test_input">Text Input</label>
<input id="test_input" type="text" maxlength="5"/>
<span>set to 5 maxlength</span>
<br>
<label for="test_input">Number Input</label>
<input id="test_input" type="number" min="0" max="99" maxlength="2"/>
<span>set to 2 maxlength, min 0 and max 99</span>
ความยาวสูงสุดจะไม่ทำงานด้วย<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"
/>
ให้บอกว่าคุณต้องการค่าสูงสุดที่อนุญาตให้เป็น 1,000 ไม่ว่าจะพิมพ์หรือหมุนด้วย
คุณ จำกัด ค่าสปินเนอร์โดยใช้:
type="number" min="0" max="1000"
และ จำกัด สิ่งที่แป้นพิมพ์พิมพ์ด้วยจาวาสคริปต์:
onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }
"
<input type="number" min="0" max="1000" onkeyup="if(parseInt(this.value)>1000){ this.value =1000; return false; }">
ตามที่ผู้อื่นระบุไว้ min / max จะไม่เหมือนกับ maxlength เนื่องจากผู้คนยังสามารถป้อนข้อมูลลอยได้ซึ่งจะมีขนาดใหญ่กว่าความยาวสตริงสูงสุดที่คุณต้องการ ในการเลียนแบบแอ็ตทริบิวต์ maxlength อย่างแท้จริงคุณสามารถทำสิ่งนี้ในการบีบ (นี้เทียบเท่ากับ maxlength = "16"):
<input type="number" oninput="if(value.length>16)value=value.slice(0,16)">
maxlength
ไม่รองรับอินพุทตัวเลข ในตัวอย่างของฉันvalue.slice(0,16)
จะไม่เตะจนกว่าค่าอินพุตจะมากกว่า 16 อักขระ
type="number"
ดูแลเรื่องนี้ :)
คำตอบของ Maycow Moura เป็นการเริ่มต้นที่ดี อย่างไรก็ตามวิธีการแก้ปัญหาของเขาหมายความว่าเมื่อคุณป้อนตัวเลขตัวที่สองการแก้ไขฟิลด์ทั้งหมดจะหยุดลง ดังนั้นคุณไม่สามารถเปลี่ยนค่าหรือลบอักขระใด ๆ ได้
รหัสต่อไปนี้หยุดที่ 2 แต่อนุญาตให้แก้ไขเพื่อดำเนินการต่อ
//MaxLength 2
onKeyDown="if(this.value.length==2) this.value = this.value.slice(0, - 1);"
ฉันมีปัญหานี้มาก่อนและฉันแก้ไขโดยใช้การรวมกันของประเภทหมายเลข html5 และ jQuery
<input maxlength="2" min="0" max="59" name="minutes" value="0" type="number"/>
สคริปต์:
$("input[name='minutes']").on('keyup keypress blur change', function(e) {
//return false if not 0-9
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
return false;
}else{
//limit length but allow backspace so that you can still delete the numbers.
if( $(this).val().length >= parseInt($(this).attr('maxlength')) && (e.which != 8 && e.which != 0)){
return false;
}
}
});
ฉันไม่ทราบว่าเหตุการณ์ต่าง ๆ เกิดขึ้นน้อยเกินไปหรือไม่ แต่มันแก้ปัญหาของฉันได้ไหม JSfiddle
อินพุต HTML
<input class="minutesInput" type="number" min="10" max="120" value="" />
jQuery
$(".minutesInput").on('keyup keypress blur change', function(e) {
if($(this).val() > 120){
$(this).val('120');
return false;
}
});
วิธีง่ายๆในการตั้งค่าความยาวสูงสุดสำหรับอินพุตตัวเลขคือ:
<input type="number" onkeypress="return this.value.length < 4;" oninput="if(this.value.length>=4) { this.value = this.value.slice(0,4); }" />
เช่นเดียวกับtype="number"
คุณระบุคุณสมบัติmax
แทนmaxlength
ซึ่งเป็นจำนวนสูงสุดที่เป็นไปได้ ดังนั้นด้วย 4 หลักmax
ควรจะเป็น9999
5 หลัก99999
เป็นต้น
นอกจากนี้หากคุณต้องการตรวจสอบให้แน่ใจว่ามันเป็นจำนวนบวกคุณสามารถตั้งค่าmin="0"
เพื่อให้มั่นใจว่าตัวเลขที่เป็นบวก
ฮึ. มันเหมือนมีคนยอมแพ้ครึ่งทางผ่านการใช้งานและคิดว่าไม่มีใครสังเกต
ไม่ว่าจะด้วยเหตุผลใดคำตอบข้างต้นไม่ได้ใช้min
และmax
คุณลักษณะ jQuery นี้เสร็จสิ้นแล้ว:
$('input[type="number"]').on('input change keyup paste', function () {
if (this.min) this.value = Math.max(parseInt(this.min), parseInt(this.value) || 0);
if (this.max) this.value = Math.min(parseInt(this.max), parseInt(this.value) || 0);
});
มันอาจจะทำงานเป็นฟังก์ชั่นที่มีชื่อ "oninput" โดยไม่มี jQuery หากหนึ่งในประเภท "jQuery-is-the-devil" ของคุณ
ขณะที่ผมพบคุณไม่สามารถใช้ใด ๆ ของonkeydown
, onkeypress
หรือonkeyup
กิจกรรมสำหรับโซลูชั่นที่สมบูรณ์รวมถึงเบราว์เซอร์มือถือ โดยวิธีonkeypress
เลิกใช้แล้วและจะไม่ปรากฏในchrome / operaสำหรับ Android (ดู: UI เหตุการณ์ W3C Working Draft, 04 สิงหาคม 2559 )
ฉันหาวิธีแก้ปัญหาโดยใช้oninput
เหตุการณ์เท่านั้น คุณอาจต้องทำการตรวจสอบหมายเลขเพิ่มเติมตามที่ต้องการเช่นเครื่องหมายลบ / บวกหรือทศนิยมและตัวคั่นหลักพันและสิ่งที่คล้ายกัน แต่เมื่อเริ่มต้นดังต่อไปนี้ควรพอเพียง:
function checkMaxLength(event) {
// Prepare to restore the previous value.
if (this.oldValue === undefined) {
this.oldValue = this.defaultValue;
}
if (this.value.length > this.maxLength) {
// Set back to the previous value.
this.value = oldVal;
}
else {
// Store the previous value.
this.oldValue = this.value;
// Make additional checks for +/- or ./, etc.
// Also consider to combine 'maxlength'
// with 'min' and 'max' to prevent wrong submits.
}
}
ฉันจะแนะนำให้รวมmaxlength
กับmin
และmax
เพื่อป้องกันการส่งที่ไม่ถูกต้องตามที่ระบุไว้ข้างต้นหลายครั้ง
<input type="number" onchange="this.value=Math.max(Math.min(this.value, 100), -100);" />
หรือถ้าคุณต้องการที่จะป้อนอะไร
<input type="number" onchange="this.value=this.value ? Math.max(Math.min(this.value,100),-100) : null" />
คุณสามารถลองใช้วิธีนี้เช่นกันสำหรับการป้อนตัวเลขด้วยการจำกัดความยาว
<input type="tel" maxlength="3" />
ฉันรู้ว่ามีคำตอบอยู่แล้ว แต่ถ้าคุณต้องการให้อินพุตของคุณทำงานเหมือนกับ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();
คุณลักษณะเพิ่มเติมที่เกี่ยวข้องกับการใช้งานจะเป็นและmin
max
นี่อาจช่วยใครซักคน
ด้วยจาวาสคริปต์เล็ก ๆ น้อย ๆ คุณสามารถค้นหาอินพุทภายในวันที่และเวลาทั้งหมดค้นหาว่าปีที่ผู้ใช้กำลังพยายามป้อนข้อมูลหรือไม่นั้นจะยิ่งใหญ่กว่า 100 ปีในอนาคต:
$('input[type=datetime-local]').each(function( index ) {
$(this).change(function() {
var today = new Date();
var date = new Date(this.value);
var yearFuture = new Date();
yearFuture.setFullYear(yearFuture.getFullYear()+100);
if(date.getFullYear() > yearFuture.getFullYear()) {
this.value = today.getFullYear() + this.value.slice(4);
}
})
});