2009-12-21 4 views
11

के माध्यम से टेक्स्टबॉक्स में बैकस्पेस को अक्षम करें मेरे पास एक टेक्स्टबॉक्स है जो अजाक्स नियंत्रण टूलकिट कैलेंडर द्वारा बढ़ाया गया है।जावास्क्रिप्ट

मैं इसे बनाना चाहता हूं ताकि उपयोगकर्ता टेक्स्टबॉक्स को संपादित नहीं कर सके और इसके बजाय इनपुट के लिए कैलेंडर विस्तारक का उपयोग करना होगा।

मैंने बैकस्पेस को छोड़कर सभी कुंजियों को अवरुद्ध करने में कामयाब रहे हैं!

<asp:TextBox ID="TextBox1" runat="server" onKeyPress="javascript: return false;" onKeyDown="javascript: return false;" onPaste="javascript: return false;" /> 

कैसे मैं भी पाठ बॉक्स के भीतर अक्षम बैकस्पेस जावास्क्रिप्ट का उपयोग कर होगा:

यह वही है मैं अब तक किया है?

संपादित

एक संपादन मेड के बाद से मैं जावास्क्रिप्ट में एक समाधान की जरूरत है।

संपादित

ऐसा लगता है कि OnKeyDown = "javascript: return false;" काम करेगा। मुझे नहीं पता कि यह पहले क्यों काम नहीं कर रहा था। मैंने एक नया टेक्स्टबॉक्स उपयोग करने का प्रयास किया और यह बैकस्पेस को अवरुद्ध कर दिया। इसलिए उन सभी को खेद है जिन्होंने कुछ उत्तर esp प्राप्त करने की उम्मीद कर उत्तर दिया। मैंने इसे बक्षीस के लिए चिह्नित किया।

मेरे टेक्स्टबॉक्स अब (प्रतीत होते हैं) सभी कीस्ट्रोक को अवरुद्ध करने के लिए और अभी भी कैलेंडर विस्तारक के साथ काम करते हैं।

उत्तर

36

ZX12R करीब था। यह सही समाधान है:

पाठ बॉक्स इस तरह है:

<asp:TextBox ID="TextBox1" runat="server" onKeyDown="preventBackspace();"></asp:TextBox> 

और स्क्रिप्ट इस तरह दिखता है:

<script type="text/javascript"> 
    function preventBackspace(e) { 
     var evt = e || window.event; 
     if (evt) { 
      var keyCode = evt.charCode || evt.keyCode; 
      if (keyCode === 8) { 
       if (evt.preventDefault) { 
        evt.preventDefault(); 
       } else { 
        evt.returnValue = false; 
       } 
      } 
     } 
    } 
</script> 

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

+0

बहुत समझदार और सही लगता है .. :) बहुत बुरा एंड्रयू अपना स्वयं का समाधान मिला ..;) – ZX12R

+0

बैकस्पेस और कीपप्रेस जानकारी के लिए +1। इस जानकारी के लिए – Nirmal

+0

+1 :) –

8

क्या आप एचटीएमएल readonly="readonly" विशेषता का उपयोग नहीं कर सकते?

<input type="text" name="country" value="Norway" readonly="readonly" /> 

<textarea rows="3" cols="25" readonly="readonly"> 
It should work! :) 
</textarea> 
+0

एएसपी.NET समकक्ष के साथ इसे वापस करने की देखभाल करें? –

+0

टेक्स्टबॉक्स में केवल पढ़ने की संपत्ति होनी चाहिए: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.readonly.aspx –

+0

मुझे विश्वास है कि यह केवल पढ़ने के लिए = "सत्य" है। यह readonly = "readonly" की अनुमति नहीं देता है। मैंने ReadOnly = "true" की कोशिश की, लेकिन दुर्भाग्यवश, यह कैलेंडर विस्तारक और सत्यापन के साथ अच्छी तरह से खेल नहीं है। – Andrew

4

प्रदर्शन के लिए लेबल का उपयोग करने और सर्वर पर मूल्य वापस पाने के लिए एक छिपे हुए टेक्स्टबॉक्स का उपयोग करने के बारे में कैसे?

1

जैसा कि अन्य ने कहा कि ReadOnly = "True" पोस्टबैक तंत्र को तोड़ देगा।

मेरा मानना ​​है कि आप Pageload दौरान सीधे अनुरोध वस्तु तक पहुंच कर अपनी में इसके चारों ओर प्राप्त कर सकते हैं कोड-पीछे:

//assuming your textbox ID is 'txtDate' 
if(Page.IsPostBack) 
{ 
    this.txtDate.Text = Request[this.txtDate.UniqueID]; 
} 

आपका दूसरा विकल्प अक्षम फार्म पर postback को नियंत्रित करता है अनुमति देने के लिए है, लेकिन यह कुछ हद तक है एक सुरक्षा चिंता का स्क्रिप्ट के माध्यम से संशोधित केवल पढ़ने के लिए फ़ील्ड संभवतः वापस आ सकता है के रूप में:

<form id="MyForm" runat="server" SubmitDisabledControls="True"> 
.. 
</form> 

http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlform.submitdisabledcontrols.aspx

मैं सुनिश्चित नहीं हूं ReadOnly पर इस संपत्ति का प्रभाव (बनाम सक्षम = "झूठा") नियंत्रण लेकिन यह कोशिश करने लायक है।

और आखिरकार - मैंने कुछ साल पहले उसी समस्या में भाग लिया था, और मुझे याद है कि एक HTML इनपुट को रीडोनली और रनैट = "सर्वर" के रूप में चिह्नित करने के बीच एक अंतर है, और एक वास्तविक सर्वरसाइड नियंत्रण जहां ReadOnly = "true"। ,

<input type="text" readonly="readonly" runat="server" id="myTextBox" /> 

अभी भी हो सकता है डेटा के माध्यम से आने की अनुमति दी है, हालांकि में कोड-पीछे आप एक HtmlInputText या HtmlGenericControl किसी पाठ बॉक्स बनाम के रूप में नियंत्रण के इलाज के लिए है:

मुझे लगता है कर रही है। आप अभी भी उन गुणों तक पहुंच सकते हैं जिनकी आपको आवश्यकता है।

बस कुछ विचार वैसे भी ...

0

यहाँ एक संभव समाधान है ... एक घटना श्रोता

<asp:TextBox ID="TextBox1" runat="server" onKeyPress="KeyCheck;" /> 

जोड़ने ... और फिर समारोह इस तरह हो सकता है ..

function KeyCheck(e) { 
var KeyID = (window.event) ? event.keyCode : e.keyCode; 
if (KeyID == 8) { 
    alert('no backspaces!!); 
} 
} 

संदेह अगर यह onkeypress या onkeyup हो गया है ...

2

आपको केवल क्लाइंट साइड कंट्रोलर पर केवल पढ़ने की आवश्यकता है, ताकि एएसपीनेट इसे देख न सके और अभी भी पोस्टबैक पर डेटा पढ़ सके। आप इसे कई तरीकों से कर सकते हैं, यदि आप jQuery का उपयोग करते हैं तो एक आसान है टेक्स्ट-बक्से जैसे वर्ग को जोड़ना। प्रश्न में cssclass="readonly" और $(".readonly").attr("readonly", true);

0

केवल पढ़ने योग्य विशेषता मदद नहीं करता है। बैकस्पेस अभी भी आपके ब्राउज़र को वापस पृष्ठ पर ले जा रहा है भले ही आपका टेक्स्ट बॉक्स केवल पढ़ा जाए ..

0

नियमित टेक्स्ट बॉक्स का उपयोग न केवल पढ़ने और अक्षम नहीं, केवल कुंजीपटल को अनदेखा करने के लिए क्लाइंट-साइड जावास्क्रिप्ट का उपयोग करें। यह सभी कीप्रेस को अनदेखा कर देगा ताकि आपके पास अपना वास्तविक व्यवहार होगा और यह बैकस्पेस को भी अनदेखा कर देगा।

<input type="text" value="Your Text Here" onkeydown="return false;" /> 
0

कोई जरूरत किसी भी कार्य को करने के लिए और सभी सिर्फ इस प्रयास करें:

<asp:TextBox runat="server" ID="txt" onkeydown="return false;" 
    onpaste = "return false;" onkeypress="return false;" /> 
0

मैं jQuery के साथ, इसी तरह कुछ करने के लिए कर रहा था। संदर्भ के लिए बस इसे बाहर रखो!

$("#inputID").keypress(function (e) 
{e.preventDefault();}); 

$("#inputID").keydown(function (e) 
{e.preventDefault();}); 

पहला कुंजीपेशियों को रोकता है, जबकि दूसरा कुंजी नीचे की घटनाओं को रोकता है।

अभी भी एक जेएस नोब, इसलिए इस के साथ अच्छी/बुरी चीजों को इंगित करने के लिए स्वतंत्र महसूस करें।