2011-09-02 19 views
9

मुझे अपनी साइट पर एक ऑर्डर पेज मिला है। कुछ ऑर्डर आइटम्स में दशमलव मात्रा हो सकती है, कुछ नहीं कर सकते हैं।उपयोगकर्ता को दशमलव में प्रवेश करने से कैसे रोकें?

उपयोगकर्ता को दशमलव मात्रा में प्रवेश करने से रोकने का सबसे अच्छा तरीका क्या है? (एक अलर्ट बॉक्स के अलावा और फ़ील्ड को शून्य पर सेट करना)?

+0

@brodie: हालांकि यह जावास्क्रिप्ट/HTML उत्तर नहीं है। – animuson

+0

Whoops, yep ने टिप्पणी हटा दी – brodie

+1

स्पष्ट होने के लिए: हालांकि हम एक अच्छे उपयोगकर्ता अनुभव के लिए जावास्क्रिप्ट में इन चीजों की जांच कर सकते हैं, लेकिन यह * जावास्क्रिप्ट को उन मानों को दर्ज करने से अक्षम नहीं करेगा * वैसे भी। यह आपकी रक्षा की अंतिम पंक्ति नहीं होनी चाहिए, और सर्वर-साइड सत्यापन भी होना चाहिए। (मुझे यकीन है कि आप यह जानते हैं, लेकिन भविष्य के पाठक नहीं हो सकते हैं।) – Matchu

उत्तर

13

फ़ील्ड के लिए इंटरसेप्ट कुंजी ईवेंट, इनपुट पर अवैध पात्रों का पता लगाएं, उन्हें फ़ील्ड में प्रवेश करने से रोकें और फ़ील्ड के पास एक अस्थायी संदेश जोड़ें (पृष्ठ में डाला गया) जो बताता है कि कौन से पात्र या मानों की अनुमति है। पॉप अप अलर्ट टाइपिंग के बीच में प्रतिक्रिया देने का एक बुरा तरीका है।

फिर, सबमिशन से पहले फिर से सत्यापित करें क्योंकि फ़ील्ड में डेटा प्राप्त करने के अन्य तरीके हैं (ड्रैग/ड्रॉप, कॉपी/पेस्ट, आदि ...) कि आपने सबकुछ पकड़ा नहीं होगा।

कार्य jsFiddle: http://jsfiddle.net/jfriend00/CkDTy/

$(".integer").keypress(function(e) { 
    if (e.which < 48 || e.which > 57) { 
     showAdvice(this, "Integer values only"); 
     return(false); 
    } 
}); 

$(".decimal").keypress(function(e) { 
    // 46 is a period 
    if (e.which != 46 && (e.which < 48 || e.which > 57)) { 
     showAdvice(this, "Decimal numbers only"); 
     return(false); 
    } 
    if (e.which == 46 && this.value.indexOf(".") != -1) { 
     showAdvice(this, "Only one period allowed in decimal numbers"); 
     return(false); // only one decimal allowed 
    } 
}); 

function showAdvice(obj, msg) { 
    $("#singleAdvice").stop(true, false).remove(); 
    $('<span id="singleAdvice" class="advice">' + msg + '</span>').insertAfter(obj); 
    $("#singleAdvice").delay(4000).fadeOut(1500); 
} 
+0

+1 इनपुट के गैर-कीस्ट्रोक विधियों को याद रखने के लिए। – nnnnnn

+0

यह तीर कुंजी या बैकस्पेस बटन का उपयोग करने का समर्थन नहीं करता है। – James

+0

@ जेम्स - मुझे यकीन नहीं है कि आपका क्या मतलब है। तीर और बैकस्पेस कुंजीपटल घटनाएं उत्पन्न नहीं करते हैं, इसलिए वे इस समाधान से अवरुद्ध नहीं होते हैं और किसी समस्या का कारण नहीं बनते हैं। – jfriend00

0

यह एक छोटा सा jQuery कि गैर रोकता है

यहाँ केवल दोनों एक पूर्णांक और एक दशमलव केवल अस्थायी संदेश के साथ क्षेत्र का प्रदर्शन किया जब अवैध कुंजी लिखे जाने के एक jQuery उदाहरण है -numerical आदानों:

$(function() { 
    $('input').bind('keyup', function(event) { 
     var currValue = $(this).val(); 

     if(currValue.search(/[^0-9]/) != -1) 
     { 
      // Change this to something less obnoxious 
      alert('Only numerical inputs please'); 
     } 

     $(this).val(currValue.replace(/[^0-9]/, '')); 
    }); 
}); 
0

आपको एक ईवेंट (कुंजी दबाने पर) जोड़ सकते हैं और पता लगाने अगर एक दशमलव बिंदु यू द्वारा दबाया गया है सकते हैं सेवा या नहीं। फॉर्म सबमिशन पर, यह भी जांचने के लिए नियमित अभिव्यक्तियों का उपयोग करें कि सबमिट किया गया डेटा सही है (क्योंकि उपयोगकर्ता लाइव एडिटर जैसे लाइव एडिटर का उपयोग कर डेटा फोर्ज कर सकता है)। यदि उपयोगकर्ता जावास्क्रिप्ट को अक्षम करता है तो भी अपने सर्वर पक्ष पर जांचना सुनिश्चित करें।

उदाहरण के लिए

: कारण यह मूल रूप से एक ही बात है

<input type="text" onkeypress="checkDecimal();" /> 
<input type="submit" onclick="checkBeforeSubmit();" /> 

function checkDecimal() { 
    // your code goes here 
} 

function checkBeforeSubmit() { 
    // your code goes here 
} 

बेहतर होगा कि तुम एक ही समारोह का उपयोग करें और दोनों घटनाओं से यह आह्वान करने के लिए।

सर्वर की ओर, सबमिट किए गए डेटा को फिर से जांचें

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

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