2011-11-26 12 views
5

Onkeydown, मैं जावास्क्रिप्ट निम्नलिखित चलाएँ:कैसे इनपुट में टाइप किया जा रहा से अमान्य वर्ण को रोकने के लिए फ़ील्ड

function ThisOnKeyDown(el) { 
    if (el.title == 'textonly') { 
     !(/^[A-Za-zÑñ-\s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ-\s]/ig, '') : null; 
    } 
    if (el.title == 'numbersonly') { 
     !(/^[0-9]*$/i).test(el.value) ? el.value = el.value.replace(/[^0-9]/ig, '') : null; 
    } 
    if (el.title == 'textandnumbers') { 
     !(/^[A-Za-zÑñ0-9-\s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ0-9-\s]/ig, '') : null; 
    } 
} 

इन तीन शीर्षक से एक विशेषताओं पृष्ठ पर विभिन्न इनपुट क्षेत्रों के लिए दिया जाता है। कोड अब तक काम करता है क्योंकि अमान्य वर्ण सही ढंग से मिटा दिए जाते हैं, लेकिन जब तक अगला वर्ण दर्ज नहीं किया जाता है। मैं पहले स्थान पर अमान्य इनपुट को अस्वीकार करने का एक तरीका ढूंढना चाहता हूं। तुम्हारी सहायता सराहनीय है!

संपादित करें: मैं वैश्विक स्तर पर घटनाएं बना रहा हूं। यहां बताया गया है मैं ऐसा:

  <input id="AppFirstName" style="width: 150px;" type="text" maxlength="30" title="textonly"/> 
+1

इस फ़ंक्शन को 'ऑनकेप्रेस' और 'ऑनकेप' – sll

+0

दोनों में जोड़ें, बस याद रखें कि इस प्रकार की सत्यापन पर्याप्त नहीं है और आपने हमेशा इस वर्ण सर्वर-साइड को हटा दिया है। –

+0

@ एसएल, ऑनकीप में जोड़ने से बैकस्पेस दिखने वाला प्रभाव मिलता है। (ऑनकीप्रेस वही करता है)। मैं जो करना चाहता हूं वह इनपुट को कभी भी प्रकट होने से इंकार कर देता है। – Mike

उत्तर

12

इसे पहले स्थान पर सेट करने से रोकने के लिए, आप कीडाउन ईवेंट हैंडलर पर झूठी वापसी कर सकते हैं, इस प्रकार घटना को आगे बढ़ाने से रोक सकते हैं।

मैंने jQuery का उपयोग करके नीचे दिया गया उदाहरण लिखा है, लेकिन परंपरागत रूप से बाध्य करते समय आप उसी फ़ंक्शन का उपयोग कर सकते हैं।

हालांकि सर्वर-साइड पर भी मान्य होना महत्वपूर्ण है, क्लाइंट-साइड सत्यापन उपयोगकर्ता मित्रता के लिए महत्वपूर्ण है। http://help.dottoro.com/ljlkwans.php

काम करता है के रूप में इरादा:

$("input.number-only").bind({ 
    keydown: function(e) { 
     if (e.shiftKey === true) { 
      if (e.which == 9) { 
       return true; 
      } 
      return false; 
     } 
     if (e.which > 57) { 
      return false; 
     } 
     if (e.which==32) { 
      return false; 
     } 
     return true; 
    } 
}); 
0

onkeyup घटना के खिलाफ अपने कोड चलाने और:

 function Globalization() { 
     var inputs = document.getElementsByTagName('input'); 
     for (i = 0; i < inputs.length; i++) { 
      inputs[i].onfocus = createEventHandler(
       ThisOnFocus, inputs[i]); 
      inputs[i].onblur = createEventHandler(
       ThisOnBlur, inputs[i]); 
      inputs[i].onkeydown = createEventHandler(
       ThisOnKeyDown, inputs[i]); 
      inputs[i].onkeyup = createEventHandler(
       ThisOnKeyUp, inputs[i]); 
     } 
    } 

Globalization()body.onload

इसलिए चलाया जाता है, एक ठेठ इनपुट क्षेत्र समारोह इस तरह कहता है बिना एचटीएमएल है ऑनकीडाउन घटना नहीं। इस तरह आप बहुत ही अंतिम कीस्ट्रोक के परिणाम तक पहुंच सकते हैं, जहां ऑनकीप ईवेंट कुंजी के रूप में निष्पादित होता है, इसके परिणाम को जानने के बिना दबाया जाता है।

+1

मैंने कोशिश की थी। यह एक बैकस्पेस-जैसे प्रभाव के लिए बनाता है। – Mike

+0

यह नहीं होना चाहिए। मैं इस कार्यक्रम का अपने आवेदन पर उपयोग करता हूं और यह ठीक काम करता है। यह देखने के लिए कि मैं क्या कर रहा हूं बस निम्न लिंक पर जाएं और टाइपिंग कोड शुरू करें। http://prettydiff.com/?m=beautify – austincheney

+0

यह सुनिश्चित नहीं है कि उस पृष्ठ पर कौन सा फ़ील्ड देखना है, लेकिन यह मेरे लिए काम नहीं करेगा। – Mike

1

मैं में इस समाधान मिल गया।

<script type="text/javascript"> 
    function FilterInput (event) { 
     var keyCode = ('which' in event) ? event.which : event.keyCode; 

     isNumeric = (keyCode >= 48 /* KeyboardEvent.DOM_VK_0 */ && keyCode <= 57 /* KeyboardEvent.DOM_VK_9 */) || 
        (keyCode >= 96 /* KeyboardEvent.DOM_VK_NUMPAD0 */ && keyCode <= 105 /* KeyboardEvent.DOM_VK_NUMPAD9 */); 
     modifiers = (event.altKey || event.ctrlKey || event.shiftKey); 
     return !isNumeric || modifiers; 
    } 
</script> 

< body> 
The following text field does not accept numeric input: 
<input type="text" onkeydown="return FilterInput (event)" />< /body> 

यह पाठ और अनुमति देता है! "# $% & लेकिन आप इसे वापसी

1

कोड किसी भी टाइपिंग से उपयोगकर्ता को रोकने के लिए उपयोगी है में validationto करने के लिए इन जोड़ने केवल निकाल कर नंबरों की अनुमति! समायोजित कर सकते हैं संख्या को छोड़कर अन्य चरित्र।

<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <script> 
      function keyispressed(e){ 
       var charval= String.fromCharCode(e.keyCode); 
       if(isNaN(charval)){ 
        return false; 
       } 
       return true; 
      } 
     </script> 
    </head> 

    <body> 
     <input type="text" onkeydown="return keyispressed(event);"/> 
    </body> 
</html> 
+0

वर्थ नोटिंग: यह कोड बैकस्पेस और शिफ्ट + तीर चयन जैसी चीज़ों को भी रोकता है। – nordhagen

1

ऊपर कोड यह वाणी ही संख्या की अनुमति देता है। आप इसे अपवाद जोड़कर इस

की तरह उदाहरण के लिए बैकस्पेस कहने के लिए संशोधित कर सकते हैं करता है
<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <script> 
      function keyispressed(e){ 
       var charval= String.fromCharCode(e.keyCode); 
       if((isNaN(charValue)) && (e.which != 8)){ // BSP KB code is 8 
        e.preventDefault(); 
       } 
       return true; 
      } 
     </script> 
    </head> 

    <body> 
     <input type="text" onkeydown="return keyispressed(event);"/> 
    </body> 
</html> 
+0

यह एक बहुत अच्छा मुद्दा है, जो दूसरों द्वारा याद किया जाता है। –

0
$('.key-filter').keypress(function() { 
    if (event.key.replace(/[^\w\-.]/g,'')=='') event.preventDefault(); 
}); 

तो^अगर jQuery या

<input type="text" onkeypress="if (event.key.replace(/[^\w\-.]/g,'')=='') event.preventDefault();" /> 

का उपयोग कर बस वर्णों से आप के बाद अंदर [] की अनुमति देना चाहते डाल अपने इनपुट के लिए महत्वपूर्ण फिल्टर वर्ग जोड़ें। यह सभी अक्षरों की संख्या _ - और अनुमति देता है।

संबंधित मुद्दे

 संबंधित मुद्दे