के लिए <input type="number">
तत्व, maxlength
काम नहीं कर रहा। मैं maxlength
उस संख्या तत्व के लिए कैसे प्रतिबंधित कर सकता हूं ?
के लिए <input type="number">
तत्व, maxlength
काम नहीं कर रहा। मैं maxlength
उस संख्या तत्व के लिए कैसे प्रतिबंधित कर सकता हूं ?
जवाबों:
और आप एक max
विशेषता जोड़ सकते हैं जो आपके द्वारा सम्मिलित किए जाने वाले उच्चतम संभव संख्या को निर्दिष्ट करेगा
<input type="number" max="999" />
यदि आप दोनों एक मान जोड़ते हैं max
और min
आप अनुमत मानों की सीमा निर्दिष्ट कर सकते हैं:
<input type="number" min="1" max="999" />
ऊपर अभी भी एक उपयोगकर्ता को निर्दिष्ट सीमा के बाहर एक मान दर्ज करने से रोक नहीं होगा । इसके बजाय उसे एक पॉपअप प्रदर्शित किया जाएगा जो उसे इस स्क्रीनशॉट में दिखाए गए फॉर्म को सबमिट करने पर इस सीमा के भीतर एक मान दर्ज करने के लिए कहेगा:
आप विशेषताओं min
और max
विशेषताओं को निर्दिष्ट कर सकते हैं , जो केवल एक विशिष्ट सीमा के भीतर इनपुट की अनुमति देगा।
<!-- equivalent to maxlength=4 -->
<input type="number" min="-9999" max="9999">
यह केवल स्पिनर नियंत्रण बटन के लिए काम करता है। यद्यपि उपयोगकर्ता अनुमति से अधिक संख्या टाइप करने में सक्षम हो सकता है max
, लेकिन फॉर्म सबमिट नहीं होगा।
क्रोम 15 से लिया गया स्क्रीनशॉट
आप वर्णों की संख्या सीमित करने के लिए जावास्क्रिप्ट में HTML5 घटना का उपयोग कर सकते हैं oninput
:
myInput.oninput = function () {
if (this.value.length > 4) {
this.value = this.value.slice(0,4);
}
}
maxlength
.............
यदि आप एक मोबाइल वेब समाधान की तलाश कर रहे हैं जिसमें आप अपने उपयोगकर्ता को पूर्ण टेक्स्ट कीबोर्ड के बजाय एक नंबर पैड देखना चाहते हैं। प्रकार = "tel" का प्रयोग करें। यह अधिकतम गति के साथ काम करेगा जो आपको अतिरिक्त जावास्क्रिप्ट बनाने से बचाता है।
अधिकतम और न्यूनतम अभी भी उपयोगकर्ता को अधिकतम और न्यूनतम से अधिक संख्या में टाइप करने की अनुमति देगा, जो कि इष्टतम नहीं है।
आप इन सभी को इस तरह से जोड़ सकते हैं:
<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
यह है कि आप अधिकतम वर्णों पर बैकस्पेस का उपयोग नहीं कर सकते हैं। इसके साथ समस्या 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;"
आप इसे पाठ के रूप में निर्दिष्ट कर सकते हैं, लेकिन पेटर्न को जोड़ सकते हैं, जो केवल मिलान संख्या:
<input type="text" pattern="\d*" maxlength="2">
यह सही काम करता है और मोबाइल पर भी (iOS 8 और एंड्रॉइड पर परीक्षण किया गया) नंबर कीबोर्ड को पॉप आउट करता है।
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" इवेंट का उपयोग करते हैं तो आपको डेवलपमेंट करते समय कोई उपयोगकर्ता सीमाएँ नहीं मिलेंगी (इकाई परीक्षण)। और यदि आपके पास कोई आवश्यकता है जो उपयोगकर्ता को किसी विशेष सीमा के बाद प्रवेश करने की अनुमति नहीं देता है, तो इस कोड को देखें और एक बार प्रयास करें।
एक अन्य विकल्प यह है कि अधिकतम श्रवण विशेषता के साथ किसी भी चीज़ के लिए केवल श्रोता को जोड़ा जाए और उसके लिए स्लाइस मान जोड़ें। उपयोगकर्ता यह मानते हुए कि इनपुट से संबंधित हर घटना के अंदर एक फ़ंक्शन का उपयोग नहीं करना चाहता है। यहाँ एक कोड स्निपेट है। 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"
/>
कहते हैं कि आप चाहते थे कि अधिकतम स्वीकृत मूल्य 1000 हो - या तो टाइप किए गए या स्पिनर के साथ।
आप स्पिनर मूल्यों का उपयोग करके प्रतिबंधित करते हैं:
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; }">
जैसा कि दूसरों द्वारा कहा गया है, न्यूनतम / अधिकतम अधिकतम गति के समान नहीं है क्योंकि लोग अभी भी एक नाव में प्रवेश कर सकते हैं जो आपके द्वारा इच्छित अधिकतम स्ट्रिंग लंबाई से बड़ा होगा। वास्तव में अधिकतम गति का अनुकरण करने के लिए, आप चुटकी में ऐसा कुछ कर सकते हैं (यह अधिकतम गति = "16%) के बराबर है:"
<input type="number" oninput="if(value.length>16)value=value.slice(0,16)">
maxlength
नंबर इनपुट द्वारा समर्थित नहीं है। मेरे उदाहरण में, value.slice(0,16)
जब तक इनपुट मान 16 वर्णों से अधिक नहीं होगा , तब तक किक नहीं करेगा।
type="number"
उस का ख्याल रखता है :)।
मे जेंको मौरा का जवाब एक अच्छी शुरुआत थी। हालाँकि, उनके समाधान का अर्थ है कि जब आप दूसरे अंक में प्रवेश करते हैं तो फ़ील्ड का सभी संपादन बंद हो जाता है। इसलिए आप मान नहीं बदल सकते हैं या किसी भी वर्ण को हटा नहीं सकते हैं।
निम्नलिखित कोड 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
संख्या आदानों के लिए अधिकतम गति निर्धारित करने का एक सरल तरीका है:
<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 अंकों के साथ , 5 अंक और इतने पर max
होना चाहिए ।9999
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" w / o jQuery के रूप में काम करेगा यदि आपका "jQuery-is-the-devil" प्रकार।
जैसा कि मुझे पता चला है कि आप मोबाइल ब्राउज़र सहित पूर्ण समाधान के लिए किसी भी onkeydown
, onkeypress
या onkeyup
घटनाओं का उपयोग नहीं कर सकते हैं। जिस तरह onkeypress
से Android के लिए क्रोम / ओपेरा में अब और नहीं निकाला गया है (देखें: UI इवेंट W3C वर्किंग ड्राफ्ट, 04 अगस्त 2016 )।
मैंने 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
रोकने की सलाह दूंगा।
मुझे पता है कि पहले से ही एक उत्तर है, लेकिन अगर आप चाहते हैं कि आपका इनपुट बिल्कुल 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);
}
})
});