2012-03-21 13 views
14

उपयोगकर्ताओं को केवल संख्याओं को टाइप करने और दशमलव विभाजक के रूप में केवल एक बिंदु टाइप करने के लिए प्रतिबंधित करने के लिए इस जावास्क्रिप्ट का उपयोग कर रहा हूं।स्क्रिप्ट में केवल संख्याओं और डॉट को अनुमति दें

<script type="text/javascript"> 
function fun_AllowOnlyAmountAndDot(txt) 
     { 
      if(event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46) 
      { 
       var txtbx=document.getElementById(txt); 
       var amount = document.getElementById(txt).value; 
       var present=0; 
       var count=0; 

       if(amount.indexOf(".",present)||amount.indexOf(".",present+1)); 
       { 
       // alert('0'); 
       } 

       /*if(amount.length==2) 
       { 
       if(event.keyCode != 46) 
       return false; 
       }*/ 
       do 
       { 
       present=amount.indexOf(".",present); 
       if(present!=-1) 
       { 
       count++; 
       present++; 
       } 
       } 
       while(present!=-1); 
       if(present==-1 && amount.length==0 && event.keyCode == 46) 
       { 
        event.keyCode=0; 
        //alert("Wrong position of decimal point not allowed !!"); 
        return false; 
       } 

       if(count>=1 && event.keyCode == 46) 
       { 

        event.keyCode=0; 
        //alert("Only one decimal point is allowed !!"); 
        return false; 
       } 
       if(count==1) 
       { 
       var lastdigits=amount.substring(amount.indexOf(".")+1,amount.length); 
       if(lastdigits.length>=2) 
          { 
           //alert("Two decimal places only allowed"); 
           event.keyCode=0; 
           return false; 
           } 
       } 
        return true; 
      } 
      else 
      { 
        event.keyCode=0; 
        //alert("Only Numbers with dot allowed !!"); 
        return false; 
      } 

     } 

    </script> 

<td align="right"> 
<asp:TextBox ID="txtQ1gTarget" runat="server" Width="30px" CssClass="txtbx" MaxLength="6" onkeypress="return fun_AllowOnlyAmountAndDot(this);"></asp:TextBox> 
</td> 

लेकिन onkeypress (यह) घटना रिटर्न इस जगह

var amount = document.getElementById(txt).value; 

क्या मेरी गलती यहाँ है पर है कि समारोह में अपेक्षित त्रुटि आपत्ति?

+0

नकल रोकने के लिए और :( – MobileMon

+0

पेस्ट आप इस कोशिश कर सकते हैं नहीं है: onkeypress = "fun_AllowOnlyAmountAndDot (घटना) वापसी," – elfekz

उत्तर

7
इसके बजाय इस का उपयोग करने का

:

onkeypress="return fun_AllowOnlyAmountAndDot(this);"

आप इस का उपयोग करना चाहिए:

onkeypress="return fun_AllowOnlyAmountAndDot(this.id);"

+0

यह एक काम कर रहा है। बहुत बहुत धन्यवाद। – itzArun

29

यह नियमित अभिव्यक्तियों का उपयोग करने के लिए एक शानदार जगह है।

नियमित अभिव्यक्ति का उपयोग करके, आप सभी कोड को केवल एक पंक्ति से बदल सकते हैं।

आप अपनी आवश्यकताओं को मान्य करने के लिए निम्नलिखित regex उपयोग कर सकते हैं:

[0-9]*\.?[0-9]*

दूसरे शब्दों में: शून्य या अधिक न्यूमेरिक वर्ण, शून्य या एक अवधि (रों) के द्वारा पीछा किया, शून्य द्वारा पीछा किया या अधिक संख्यात्मक पात्र। अपने पूरे समारोह की जगह ले सकता

function validate(s) { 
    var rgx = /^[0-9]*\.?[0-9]*$/; 
    return s.match(rgx); 
} 

कि कोड:

आप इस के साथ अपने कोड के स्थान पर कर सकते हैं!

ध्यान दें कि आपको बैकस्लैश के साथ अवधि से बचना है (अन्यथा यह 'किसी भी चरित्र' के लिए खड़ा है)।

जावास्क्रिप्ट के साथ नियमित अभिव्यक्ति का उपयोग कर के बारे में अधिक पढ़ने के लिए, यह बाहर की जाँच:

आप यहां ऊपर regex परीक्षण कर सकते हैं:

01 regex के

स्पष्टीकरण ऊपर प्रयोग किया है:

  • कोष्ठक मतलब है "इन कोष्ठक अंदर किसी भी चरित्र।" आप वर्णों की एक श्रृंखला को इंगित करने के लिए एक हाइफ़न (ऊपर की तरह) का उपयोग कर सकते हैं।

  • * का अर्थ है "पिछली अभिव्यक्ति का शून्य या अधिक।"

  • [0-9]* का अर्थ है "शून्य या अधिक संख्या"

  • बैकस्लैश अवधि के लिए एक भागने चरित्र के रूप में प्रयोग किया जाता है, क्योंकि इस अवधि आमतौर पर "किसी भी चरित्र के लिए खड़ा है।"

  • ? का अर्थ है" पिछले शून्य या चरित्र में से एक। "

  • ^ एक स्ट्रिंग की शुरुआत प्रतिनिधित्व करता है।

  • $ एक स्ट्रिंग के अंत का प्रतिनिधित्व करता है।

  • ^ के साथ रेगेक्स शुरू करना और इसे $ के साथ समाप्त करना सुनिश्चित करता है कि संपूर्ण स्ट्रिंग regex पैटर्न का पालन करता है।

आशा है कि इससे मदद मिलती है!

+0

धन्यवाद। मुझे नियमित अभिव्यक्तियों के साथ प्रयास करने दें – itzArun

+0

क्या मिलान() मिलान() होना चाहिए? –

+0

^हाँ ... धन्यवाद! – jahroy

11

इसके बजाए Jquery का उपयोग करें। अपने टेक्स्टबॉक्स में दशमलव कक्षा जोड़ें:

<input type="text" class="decimal" value="" /> 

इस कोड का उपयोग अपने जेएस में करें। यह कई दशमलव के लिए जांच करता है और उपयोगकर्ताओं को केवल संख्याओं को टाइप करने के लिए प्रतिबंधित करता है।

$('.decimal').keyup(function(){ 
    var val = $(this).val(); 
    if(isNaN(val)){ 
     val = val.replace(/[^0-9\.]/g,''); 
     if(val.split('.').length>2) 
      val =val.replace(/\.+$/,""); 
    } 
    $(this).val(val); 
});​ 

चेक इस बेला: http://jsfiddle.net/2YW8g/

आशा है कि यह मदद करता है।

1

<script type="text/javascript"> 
    function numericValidation(txtvalue) { 
     var e = event || evt; // for trans-browser compatibility 
     var charCode = e.which || e.keyCode; 
     if (!(document.getElementById(txtvalue.id).value)) 
     { 
      if (charCode > 31 && (charCode < 48 || charCode > 57)) 
       return false; 
      return true; 
     } 
     else { 
       var val = document.getElementById(txtvalue.id).value; 
      if(charCode==46 || (charCode > 31 && (charCode > 47 && charCode < 58))) 
      { 
       var points = 0;    
       points = val.indexOf(".", points);      
       if (points >= 1 && charCode == 46) 
       {  
        return false; 
       }     
       if (points == 1) 
       { 
        var lastdigits = val.substring(val.indexOf(".") + 1, val.length); 
        if (lastdigits.length >= 2) 
        { 
         alert("Two decimal places only allowed"); 
         return false; 
        } 
       } 
       return true; 
      } 
      else { 
       alert("Only Numarics allowed"); 
       return false; 
      } 
     } 
    } 

</script> 
<form id="form1" runat="server"> 
<div> 
    <asp:TextBox ID="txtHDLLevel" MaxLength="6" runat="server" Width="33px" onkeypress="return numericValidation(this);" /> 
</div> 
</form> 

+1

समाधान पोस्ट करना अच्छा है, लेकिन अगर आप गलती का वर्णन करते हैं या हाइलाइट करते हैं तो यह आपके उत्तर में सुधार कर सकता है। – Smamatti

2

यह मेरे लिए सबसे अच्छा काम करता है।

मैं धुंध पर एक मुद्रा फॉर्मेटर भी लागू करता हूं जहां दशमलव भाग 2 अंकों पर गोल होता है, बस parseFloat के साथ सत्यापन के बाद।

कर्सर की स्थिति प्राप्त करने और सेट करने वाले फ़ंक्शंस विशाल मोनपारा के ब्लॉग से हैं। मैं उन कार्यों के साथ फोकस पर कुछ अच्छी चीजें भी करता हूं। आप कोड के 2 ब्लॉक को आसानी से हटा सकते हैं, जहां आप चाहें तो 2 दशमलव को मजबूर कर दिया जाता है और सेट/कैरेट फ़ंक्शन प्राप्त करने से छुटकारा पाता है।

<html> 
<body> 
<input type="text" size="30" maxlength="30" onkeypress="return numericValidation(this,event);" /> 
<script language="JavaScript"> 
    function numericValidation(obj,evt) { 
     var e = event || evt; // for trans-browser compatibility 

     var charCode = e.which || e.keyCode;   

     if (charCode == 46) { //one dot 
      if (obj.value.indexOf(".") > -1) 
       return false; 
      else { 
       //---if the dot is positioned in the middle give the user a surprise, remember: just 2 decimals allowed 
       var idx = doGetCaretPosition(obj); 
       var part1 = obj.value.substr(0,idx), 
        part2 = obj.value.substring(idx); 

       if (part2.length > 2) { 
        obj.value = part1 + "." + part2.substr(0,2); 
        setCaretPosition(obj, idx + 1); 
        return false; 
       }//--- 

       //allow one dot if not cheating 
       return true; 
      } 
     } 
     else if (charCode > 31 && (charCode < 48 || charCode > 57)) { //just numbers 
      return false; 
     } 

     //---just 2 decimals stubborn! 
     var arr = obj.value.split(".") , pos = doGetCaretPosition(obj); 

     if (arr.length == 2 && pos > arr[0].length && arr[1].length == 2)        
      return false; 
     //--- 

     //ok it's a number 
     return true; 
    } 

    function doGetCaretPosition (ctrl) { 
     var CaretPos = 0; // IE Support 
     if (document.selection) { 
     ctrl.focus(); 
      var Sel = document.selection.createRange(); 
      Sel.moveStart ('character', -ctrl.value.length); 
      CaretPos = Sel.text.length; 
     } 
     // Firefox support 
     else if (ctrl.selectionStart || ctrl.selectionStart == '0') 
      CaretPos = ctrl.selectionStart; 
     return (CaretPos); 
    } 

    function setCaretPosition(ctrl, pos){ 
     if(ctrl.setSelectionRange) 
     { 
      ctrl.focus(); 
      ctrl.setSelectionRange(pos,pos); 
     } 
     else if (ctrl.createTextRange) { 
      var range = ctrl.createTextRange(); 
      range.collapse(true); 
      range.moveEnd('character', pos); 
      range.moveStart('character', pos); 
      range.select(); 
     } 
    } 
</script> 
</body> 
</html> 
1
function isNumber(evt) { 
    evt = (evt) ? evt : window.event; 
    var charCode = (evt.which) ? evt.which : evt.keyCode; 
    if (charCode > 31 && (charCode < 46 || charCode > 57)) { 
     return false; 
    } 
    return true; 
} 

आप इस सुविधा का उपयोग करते हैं और इस तत्व के गुणों लिखना चाहिए;

एचटीएमएल कोड:

<input id="deneme" data-mini="true" onKeyPress="return isNumber(event)" type="text"/>` 
0

इस समारोह संख्या के अलावा और कुछ और एक एकल डॉट के प्रवेश को रोकने जाएगा।

function validateQty(el, evt) { 
 
    var charCode = (evt.which) ? evt.which : event.keyCode 
 
    if (charCode != 45 && charCode != 8 && (charCode != 46) && (charCode < 48 || charCode > 57)) 
 
     return false; 
 
    if (charCode == 46) { 
 
     if ((el.value) && (el.value.indexOf('.') >= 0)) 
 
      return false; 
 
     else 
 
      return true; 
 
    } 
 
    return true; 
 
    var charCode = (evt.which) ? evt.which : event.keyCode; 
 
    var number = evt.value.split('.'); 
 
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) { 
 
     return false; 
 
    } 
 
};
<input type="text" onkeypress='return validateQty(this,event);'>

3

function isNumberKey(evt,id) 
 
{ 
 
\t try{ 
 
     var charCode = (evt.which) ? evt.which : event.keyCode; 
 
    
 
     if(charCode==46){ 
 
      var txt=document.getElementById(id).value; 
 
      if(!(txt.indexOf(".") > -1)){ 
 
\t 
 
       return true; 
 
      } 
 
     } 
 
     if (charCode > 31 && (charCode < 48 || charCode > 57)) 
 
      return false; 
 

 
     return true; 
 
\t }catch(w){ 
 
\t \t alert(w); 
 
\t } 
 
}
<html> 
 
    <head> 
 
    </head> 
 
    <body> 
 
    <INPUT id="txtChar" onkeypress="return isNumberKey(event,this.id)" type="text" name="txtChar"> 
 
    </body> 
 
</html>

+1

कृपया बताएं कि आपने क्या किया। – Sam

-2
<input type="text" class="form-control" id="odometer_reading" name="odometer_reading" placeholder="Odometer Reading" onblur="odometer_reading1();" onkeypress='validate(event)' required="" /> 
<script> 
       function validate(evt) { 
        var theEvent = evt || window.event; 
        var key = theEvent.keyCode || theEvent.which; 
        key = String.fromCharCode(key); 
        var regex = /[0-9]|\./; 
        if(!regex.test(key)) { 
        theEvent.returnValue = false; 
        if(theEvent.preventDefault) theEvent.preventDefault(); 
        } 
       } 
      </script> 
1
<input type="text" class="decimal" value="" /> 
$('.decimal').keypress(function(evt){ 
    return (/^[0-9]*\.?[0-9]*$/).test($(this).val()+evt.key); 
}); 

मुझे लगता है कि इस सरल समाधान हो सकता है।

+0

महान काम कर रहा है। मैंने पाया सबसे सरल और प्रभावी समाधान, धन्यवाद – RDev

1

कोशिश इस संहिता

var check = function(evt){ 
 

 
var data = document.getElementById('num').value; 
 
if((evt.charCode>= 48 && evt.charCode <= 57) || evt.charCode== 46 ||evt.charCode == 0){ 
 
if(data.indexOf('.') > -1){ 
 
if(evt.charCode== 46) 
 
    evt.preventDefault(); 
 
} 
 
}else 
 
evt.preventDefault(); 
 
}; 
 

 
document.getElementById('num').addEventListener('keypress',check);
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<title>Page Title</title> 
 
</head> 
 
<body> 
 
<input type="text" id="num" value="" /> 
 

 

 

 
</body> 
 
</html>

+0

अच्छा काम, कोडिंग रखें –

1

(वर्ग चयनकर्ता का उपयोग करके) एक से अधिक पाठ फ़ील्ड के लिए इस प्रयास करें:

Click here for example..

var checking = function(event){ 
 
\t var data = this.value; 
 
\t if((event.charCode>= 48 && event.charCode <= 57) || event.charCode== 46 ||event.charCode == 0){ 
 
\t \t if(data.indexOf('.') > -1){ 
 
    \t \t \t if(event.charCode== 46) 
 
    \t \t \t \t event.preventDefault(); 
 
\t \t } 
 
\t }else 
 
\t \t event.preventDefault(); 
 
\t }; 
 

 
\t function addListener(list){ 
 
\t \t for(var i=0;i<list.length;i++){ 
 
    \t \t list[i].addEventListener('keypress',checking); 
 
    \t } 
 
\t } 
 
\t var classList = document.getElementsByClassName('number'); 
 
\t addListener(classList);
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<title>Page Title</title> 
 
</head> 
 
<body> 
 
    <input type="text" class="number" value="" /><br><br> 
 
    <input type="text" class="number" value="" /><br><br> 
 
    <input type="text" class="number" value="" /><br><br> 
 
    <input type="text" class="number" value="" /><br><br> 
 
</body> 
 
</html>

1

बस नीचे दिए गए कोड को जोड़ने के अपने इनपुट पाठ में:

onkeypress='return event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)' 
संबंधित मुद्दे