"इनपुट" प्रकार के साथ html इनपुट अक्षर 'e' को क्षेत्र में प्रवेश करने की अनुमति क्यों देता है?


217

मेरे पास निम्नलिखित HTML5 इनपुट तत्व हैं:

<input type="number">

यह इनपुट 'e' इनपुट क्षेत्र में प्रवेश करने की अनुमति क्यों देता है? कोई अन्य वर्णमाला वर्ण दर्ज नहीं किया जा सकता है (उम्मीद के मुताबिक)

क्रोम बनाम 44.0.2403.107 का उपयोग करना

यह देखने के लिए कि मेरा क्या मतलब है: http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number


3
यह आपको .कुछ ब्राउज़रों में +, - और कई बार दर्ज करने की अनुमति भी देता है।
nu सदाबहार

जवाबों:


217

क्योंकि वास्तव में यह कैसे युक्ति कहता है कि यह काम करना चाहिए। संख्या इनपुट फ्लोटिंग-पॉइंट नंबरों को स्वीकार कर सकती है , जिसमें नकारात्मक प्रतीक और चरित्र eया E(जहां घातांक eया उसके बाद का नंबर है E) शामिल हैं:

एक फ्लोटिंग-पॉइंट नंबर में निम्नलिखित भाग होते हैं, बिल्कुल निम्नलिखित क्रम में:

  1. वैकल्पिक रूप से, पहला वर्ण " -" वर्ण हो सकता है ।
  2. रेंज में एक या अधिक वर्ण " 0—9"।
  3. वैकल्पिक रूप से, निम्नलिखित भागों, बिल्कुल निम्नलिखित क्रम में:
    1. एक " ." चरित्र
    2. सीमा में एक या अधिक वर्ण " 0—9"
  4. वैकल्पिक रूप से, निम्नलिखित भागों, बिल्कुल निम्नलिखित क्रम में:
    1. एक " e" चरित्र या " E" चरित्र
    2. वैकल्पिक रूप से, एक " -" वर्ण या " +" वर्ण
    3. रेंज में एक या अधिक वर्ण " 0—9"।

2
आह, धन्यवाद। मैं गलत कल्पना
Gnarlywhale

4
मैं अभी भी इससे परेशान हूं, सबसे पहले मैं गणितज्ञ नहीं हूं, इसलिए एक संख्या के संदर्भ में "ई" क्या है? दूसरा मुझे नहीं मिलता कि input.value एक खाली स्ट्रिंग क्यों है जैसे ही आप इसमें "e" लिखते हैं, भले ही संख्याएँ हों और चरित्र की अनुमति हो ...
शमौन

9
@Simon, eबड़ी संख्या को संघनित करने के लिए उपयोगी है जो अन्यथा टाइप करने के लिए थकाऊ होगा। एक तुच्छ उदाहरण के रूप में,2e2 = 2*10^2 = 200
गेरनलीव्हले

3
@Simon "जैसे ही मैं ई लिखता हूं" , ठीक है, हां "4e" एक संख्या नहीं है, जबकि उदाहरण के लिए "4e + 0" एक वैध संख्या (4) है। यदि आपके पास आंशिक उपयोगकर्ता इनपुट के साथ काम करने वाले कुछ "लाइव" क्लाइंट-साइड जावास्क्रिप्ट कोड हैं, तो आपको पूर्ण मूल्य प्रदान करने के लिए उसका इनपुट संपादन समाप्त करने के लिए उपयोगकर्ता को समय देना होगा, और संपादन में आधे रास्ते में हस्तक्षेप नहीं करना चाहिए। यदि आपके पास "4e + 0" इनपुट से "अपरिभाषित" है, तो अपना "नंबर" पार्सर पर ठीक करें। प्रश्न से उदाहरण अच्छी तरह से काम करता है, "4e + 1" को त्रुटि के रूप में रिपोर्ट करता है, और "4e + 0" को "4e + 0" (यानी 1 और 5 के बीच संख्या) के रूप में सही ढंग से वापस किया जाता है।
पेड --7

4
@ एंथनी नहीं, eएक्सपोनेंट के लिए खड़ा है।
स्कॉट मार्कस 16

62

हम इसे नीचे की तरह सरल बना सकते हैं

<input type="number"  onkeydown="javascript: return event.keyCode == 69 ? false : true" />

अद्यतन उत्तर

हम इसे और भी सरल बना सकते हैं क्योंकि @ 88 एमपीजी का सुझाव है

<input type="number" onkeydown="return event.keyCode !== 69" />


17
return event.keyCode !== 69एक अनावश्यक टर्नरी ऑपरेटर से बचने के रूप में उपयोग करने के लिए बेहतर है । इनलाइनिंग की भी सिफारिश नहीं करेंगे।
एडम फ्रेटिनो

5
यह कॉपी- eE
पेस्टिंग

18

एचटीएमएल इनपुट नंबर प्रकार "ई / ई" की अनुमति देता है क्योंकि "ई" घातीय के लिए खड़ा है जो एक संख्यात्मक प्रतीक है।

उदाहरण 200000 को 2e5 के रूप में भी लिखा जा सकता है। मुझे उम्मीद है कि इस सवाल के लिए धन्यवाद।          


15

केवल अंकों से बनी संख्या के उपयोग को बाध्य करने का सबसे अच्छा तरीका :

<input type="number" onkeydown="javascript: return event.keyCode === 8 ||
event.keyCode === 46 ? true : !isNaN(Number(event.key))" />

यह 'ई', '-', '+', 'से बचा जाता है।' ... सभी वर्ण जो संख्या नहीं हैं!

केवल संख्या कुंजियों को अनुमति देने के लिए:

isNaN (संख्या (event.key))

लेकिन स्वीकार करें "बैकस्पेस" (कीकोड: 8) और "डिलीट" (कीकोड: 46) ...


11
<input type="number" onkeydown="return FilterInput(event)" onpaste="handlePaste(event)"  >

function FilterInput(event) {
    var keyCode = ('which' in event) ? event.which : event.keyCode;

    isNotWanted = (keyCode == 69 || keyCode == 101);
    return !isNotWanted;
};
function handlePaste (e) {
    var clipboardData, pastedData;

    // Get pasted data via clipboard API
    clipboardData = e.clipboardData || window.clipboardData;
    pastedData = clipboardData.getData('Text').toUpperCase();

    if(pastedData.indexOf('E')>-1) {
        //alert('found an E');
        e.stopPropagation();
        e.preventDefault();
    }
};

2
आप कितने आश्वस्त हैं कि इससे कॉपी और पेस्ट की कार्यक्षमता के साथ 'ई' अक्षर डालने से रोका जा सकता है?
स्टीफनकेलर

1
बस जाँच की गई, आप सही हैं, यह कॉपी और पेस्ट किए गए इनपुट के लिए काम नहीं करता है।
गर्निल्वले जूल

आप सही हैं @StephenKelzer। मैंने उसे संभालने के लिए कोड जोड़ा।
ट्रुथसेकर जूल


3

कोणीय का उपयोग करना, आप ई, +, -, ई में प्रवेश करने के लिए प्रतिबंधित करने के लिए ऐसा कर सकते हैं

 <input type="number"  (keypress)="numericOnly($event)"/>


  numericOnly(event): boolean { // restrict e,+,-,E characters in  input type number
    debugger
    const charCode = (event.which) ? event.which : event.keyCode;
    if (charCode == 101 || charCode == 69 || charCode == 45 || charCode == 43) {
      return false;
    }
    return true;

  }

2
यह उपयोगकर्ता को उस चरित्र में प्रवेश करने के लिए प्रतिबंधित करेगा ??
एमी

1
मदद के लिए धन्यवाद मैं कोणीय में एक ही समाधान के लिए देख रहा था, लेकिन अब मुझे पता है कि यह कैसे करना है, मैं निर्देश बनाऊंगा और अपने पद के लिए कार्य को पूरा करूंगा
एमी

आप सबसे अच्छा अभ्यास कर सकते हैं कि निर्देश बना सकते हैं। के रूप में अच्छी तरह से आप भी सीधे अपने घटक की .ts फ़ाइल में कर सकते हैं!
रिंकू चौधरी

0

कोणीय; IDE कीकोड के साथ चेतावनी दी गई

कार्यात्मक रूप से रिंकू के उत्तर के समान लेकिन IDE चेतावनी की रोकथाम के साथ

numericOnly(event): boolean {
    // noinspection JSDeprecatedSymbols
    const charCode = (event.which) ? event.which : event.key || event.keyCode;  // keyCode is deprecated but needed for some browsers
    return !(charCode === 101 || charCode === 69 || charCode === 45 || charCode === 43);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.