टेक्स्ट इनपुट के साथ jQuery का डेटपिकर जो उपयोगकर्ता इनपुट की अनुमति नहीं देता है


140

मैं टेक्स्ट बॉक्स इनपुट के साथ jQuery डेटपिकर का उपयोग कैसे करूं:

$("#my_txtbox").datepicker({
  // options
});

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

क्या यह संभव है?

jQuery 1.2.6
डेटापिकर 1.5.2

जवाबों:


269

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

<input type='text' id='foo' readonly='true'>

30
उन लोगों के लिए, जिनके पास जावास्क्रिप्ट अक्षम है, मैं HTML में इनपुट फ़ील्ड को अकेला छोड़ दूँगा और पेज लोड $ (डॉक्यूमेंट) (।) ($) ("# My_txtbox") पर jQuery की बिट को आसानी से जगह देगा। 'readOnly', 'true'); }); इस तरह जेएस के साथ बंद उपयोगकर्ता अभी भी एक तारीख चुन सकते हैं
सिमोनेट्स

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

1
@FooBar आपने एक व्यावहारिक समाधान प्रस्तावित किया; सिर्फ एक नोट कि वर्तमान पसंदीदा तरीका (जैसा कि आपकी टिप्पणी के बाद से कुछ समय बीत चुका है) आसानी से सेट करने के लिए प्रोप () विधि के माध्यम से है:$("#my_txtbox").prop('readonly', true)
वर्नर

2
प्रति WC3 HTML विनिर्देश के रूप में, अपने ही <input केवल पढ़ने के लिए> या <इनपुट केवल पढ़ने के लिए = "केवल पढ़ने के लिए"> सही / गलत बिना w3.org/TR/html5/forms.html#the-readonly-attribute
अंकित शर्मा

5
मैं एक कर्सर पॉइंटर का उपयोग करने के लिए इसे क्लिक करने योग्य <input ... readonly="readonly" style="cursor:pointer; background-color: #FFFFFF">
बनाता हूँ

61

अपने अनुभव के आधार पर मैं Adhip Gupta द्वारा सुझाए गए समाधान की सिफारिश करूंगा:

$("#my_txtbox").attr( 'readOnly' , 'true' );

निम्नलिखित कोड उपयोगकर्ता प्रकार नए पात्रों नहीं दूँगा, लेकिन होगा उन्हें हटा दें पात्रों करने की अनुमति:

$("#my_txtbox").keypress(function(event) {event.preventDefault();});

इसके अतिरिक्त, यह उन लोगों के लिए फॉर्म को बेकार कर देगा, जिनके पास जावास्क्रिप्ट अक्षम है:

<input type="text" readonly="true" />

3
ओपी को जावास्क्रिप्ट अक्षम परिदृश्य के कारण इसे उत्तर के रूप में चिह्नित करने पर विचार करना चाहिए।
CeejeeB

7
किस समानांतर ब्रह्मांड में लोग निष्क्रिय जावास्क्रिप्ट के साथ नियमित वेब साइट का उपयोग करते हैं?
d.raev

यदि जावास्क्रिप्ट को वैसे भी निष्क्रिय कर दिया गया तो यह JAVASCRIPT कैसे मदद करेगा?
पीडब्लू कद

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

2
लेखन के समय, यह jQuery का उपयोग करके आसानी से विशेषता सेट करने का पसंदीदा तरीका है $("#my_txtbox").prop('readonly', true):;
वर्नर

13

प्रयत्न

$("#my_txtbox").keypress(function(event) {event.preventDefault();});

मैंने इसे asp.net के साथ सफलता के साथ उपयोग किया है क्योंकि इसे सेट करते समय अच्छा नहीं खेला गया था <asp: textbox> आसानी से "सच" के लिए विशेषता
Russ Cam

2
यह किसी को भविष्य के संदर्भ के लिए टेक्स्टबॉक्स में मान को चिपकाने से नहीं रोकता है।
एरिक फिलिप्स

10

यदि आप कई स्थानों पर तिथि-चयनकर्ता का पुन: उपयोग कर रहे हैं, तो यह पाठ बॉक्स को संशोधित करने के लिए उपयुक्त होगा, जावास्क्रिप्ट के माध्यम से भी कुछ का उपयोग करके:

$("#my_txtbox").attr( 'readOnly' , 'true' );

उस स्थान से पहले / बाद में जहां आप अपनी डेटापिक को इनिशियलाइज़ करते हैं।


6
<input type="text" readonly="true" />

टेक्स्टबॉक्स पोस्टबैक के बाद अपना मूल्य खो देता है।

आपको ब्रैड 8118 के सुझाव का उपयोग करना चाहिए जो पूरी तरह से काम कर रहा है।

$("#my_txtbox").keypress(function(event) {event.preventDefault();});

संपादित करें: IE के लिए काम करने के लिए 'कीपर' के बजाय 'कीडाउन' का उपयोग करना


4
$("#txtfromdate").datepicker({         
    numberOfMonths: 2,
    maxDate: 0,               
    dateFormat: 'dd-M-yy'       
}).attr('readonly', 'readonly');

jquery में पठनीय विशेषता जोड़ें।


4

ऐसा करने के लिए आपके पास दो विकल्प हैं। (जहाँ तक मुझे पता है)

  1. विकल्प A: अपने पाठ क्षेत्र को ही पढ़ें। इसे निम्नानुसार किया जा सकता है।

  2. विकल्प B: कर्सर ऑनफोकस को बदलें। ब्लि करने के लिए ti सेट करें। यह onfocus="this.blur()"आपकी तिथि पिकर पाठ फ़ील्ड के लिए विशेषता सेट करके किया जा सकता है ।

उदाहरण के लिए: <input type="text" name="currentDate" id="currentDate" onfocus="this.blur()" readonly/>


2
कलंक हैक थोड़े भयानक था। फ़ील्ड को आसानी से पढ़ने की ज़रूरत नहीं थी, जो क्रोम में एक फ़ील्ड पर विशाल लाल STOP मिलने पर कुछ उपयोगकर्ताओं को भ्रमित करता है ... यह कट और पेस्ट, विलोपन, टाइपिंग आदि को रोकता है ... और jquery datepicker अभी भी ठीक काम करता है ...
डेविड सी।


3

ध्यान केंद्रित करने के लिए पॉपअप करने के लिए डेट-टिकर पर:

$(".selector").datepicker({ showOn: 'both' })

यदि आप उपयोगकर्ता इनपुट नहीं चाहते हैं, तो इसे इनपुट फ़ील्ड में जोड़ें

<input type="text" name="date" readonly="readonly" />

3

मैं अभी इस पर आया हूं इसलिए मैं यहां साझा कर रहा हूं। यहाँ विकल्प है

https://eonasdan.github.io/bootstrap-datetimepicker/Options/#ignorereadonly

यहाँ कोड है।

एचटीएमएल

<br/>
<!-- padding for jsfiddle -->
<div class="input-group date" id="arrival_date_div">
  <input type="text" class="form-control" id="arrival_date" name="arrival_date" required readonly="readonly" />
  <span class="input-group-addon">
    <span class="glyphicon-calendar glyphicon"></span>
  </span>
</div>

जे एस

$('#arrival_date_div').datetimepicker({
  format: "YYYY-MM-DD",
  ignoreReadonly: true
});

यहाँ बेला है:

http://jsfiddle.net/matbaric/wh1cb6cy/

बूटस्ट्रैप-डेटाइमपिकर.जेएस का मेरा संस्करण 4.17.45 है


1

यह डेमो इस तरह का होता है कि कैलेंडर को टेक्स्ट फ़ील्ड पर रखकर ताकि आप उसमें टाइप न कर सकें। आप केवल सुनिश्चित करने के लिए इनपुट फ़ील्ड को केवल HTML में पढ़ने के लिए सेट कर सकते हैं।

<input type="text" readonly="true" />

1

एचटीएमएल

<input class="date-input" type="text" readonly="readonly" />

सीएसएस

.date-input {
      background-color: white;
      cursor: pointer;
}

1

मुझे पता है कि यह धागा पुराना है, लेकिन अन्य लोगों के लिए जो समान समस्या का सामना करते हैं, जो @ ब्रैड 8118 समाधान को लागू करते हैं (जो मुझे पसंद है, क्योंकि यदि आप इनपुट को आसानी से बनाना चाहते हैं तो उपयोगकर्ता डेटपिकर से डाले गए दिनांक मान को हटाने में सक्षम नहीं होगा। यदि वह चुनता है) और उपयोगकर्ता को एक मान को चिपकाने से रोकने की आवश्यकता है (जैसा कि @ErikPhilips को सुझाव दिया जाना चाहिए), तो मैंने इसे यहाँ जोड़ दिया, जिसने मेरे लिए काम किया: $("#my_txtbox").bind('paste',function(e) { e.preventDefault(); //disable paste });यहाँ से https://www.dotnettricks.com/learn/ jquery / विकलांग-कट-कॉपी-एंड-पेस्ट-इन-टेक्स्टबॉक्स-उपयोग-jquery-javascript और मेरे द्वारा उपयोग की जाने वाली संपूर्ण विशिष्ट स्क्रिप्ट (इसके बजाय fengyuanchen / datepicker प्लगइन का उपयोग करके):

$('[data-toggle="datepicker"]').datepicker({
    autoHide: true,
    pick: function (e) {
        e.preventDefault();
        $(this).val($(this).datepicker('getDate', true));
    }
}).keypress(function(event) {
    event.preventDefault(); // prevent keyboard writing but allowing value deletion
}).bind('paste',function(e) {
    e.preventDefault()
}); //disable paste;


0

मैंने पाया है कि jQuery कैलेंडर प्लगइन, मेरे लिए कम से कम, सामान्य तौर पर तारीखों के चयन के लिए बेहतर काम करता है।


0
$('.date').each(function (e) {
    if ($(this).attr('disabled') != 'disabled') {
        $(this).attr('readOnly', 'true');
        $(this).css('cursor', 'pointer');
        $(this).css('color', '#5f5f5f');
    }
});

0

यहां आपका जवाब है जो हल करने का तरीका है। आप टेक्स्ट बॉक्स नियंत्रण में उपयोगकर्ता इनपुट को प्रतिबंधित करने पर jquery का उपयोग नहीं करना चाहते हैं।

<input type="text" id="my_txtbox" readonly />  <!--HTML5-->

<input type="text" id="my_txtbox" readonly="true"/>


0

टेक्स्टबॉक्स का उपयोग करने के बजाय आप बटन का भी उपयोग कर सकते हैं। मेरे लिए सबसे अच्छा काम करता है, जहां मैं नहीं चाहता कि उपयोगकर्ता मैन्युअल रूप से तारीख लिखें।

यहां छवि विवरण दर्ज करें


0

मुझे पता है कि यह सवाल पहले से ही उत्तर दिया गया है, और सबसे अधिक उपयोग करने का सुझाव दिया गया है readonly
मैं सिर्फ अपना परिदृश्य साझा करना चाहता हूं और जवाब देना चाहता हूं।

readonlyमेरे HTML तत्व में विशेषता जोड़ने के बाद , मुझे समस्या का सामना करना पड़ा कि मैं इस विशेषता को requiredगतिशील रूप से बनाने में सक्षम नहीं हूं ।
यहां तक ​​कि दोनों के रूप में स्थापित करने की कोशिश की readonlyऔरrequired HTML निर्माण समय पर ।

तो मेरा सुझाव है कि readonlyयदि आप इसे requiredभी सेट करना चाहते हैं तो उपयोग न करें ।

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

$("#my_txtbox").datepicker({
    // options
});

$("#my_txtbox").keypress(function(event) {
    return ( ( event.keyCode || event.which ) === 9 ? true : false );
});

यह tabकेवल कुंजी दबाने की अनुमति देता है ।
आप अधिक कीकोड जोड़ सकते हैं जिसे आप बायपास करना चाहते हैं।

जब से मैंने दोनों को जोड़ा है, मैं कोड से नीचे हूं readonlyऔर requiredयह अभी भी फॉर्म सबमिट करता है।
हटाने के बाद readonlyयह ठीक से काम करता है।

https://jsfiddle.net/shantaram/hd9o7eor/

$(function() {
  $('#id-checkbox').change( function(){
  	$('#id-input3').prop('required', $(this).is(':checked'));
  });
  $('#id-input3').datepicker();
  $("#id-input3").keypress(function(event) {
    return ( ( event.keyCode || event.which ) === 9 ? true : false );
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<link href="https://code.jquery.com/ui/jquery-ui-git.css" rel="stylesheet"/>

<form action='https://jsfiddle.net/'>
Name:  <input type="text" name='xyz' id='id-input3' readonly='true' required='true'> 
    <input type='checkbox' id='id-checkbox'> Required <br>
    <br>
    <input type='submit' value='Submit'>
</form>


0

समय बीनने वाले की आईडी बदलें: IDofDatetimePicker अपनी आईडी पर।

यह उपयोगकर्ता को किसी भी अन्य कीबोर्ड इनपुट में प्रवेश करने से रोकेगा लेकिन फिर भी, उपयोगकर्ता समय पॉपअप तक पहुंचने में सक्षम होगा।

$ ("# my_txtbox")। कीपर्स (फंक्शन (इवेंट) {event.preventDefault ();});

इस स्रोत को आज़माएँ: https://github.com/jonthornton/jquery-timepicker/issues/109


0

इस प्रश्न के बहुत पुराने उत्तर हैं और आसानी से स्वीकार किए जाने वाला समाधान प्रतीत होता है। मेरा मानना ​​है कि आधुनिक ब्राउज़रों में बेहतर दृष्टिकोण inputmode="none"HTML इनपुट टैग में उपयोग करना है:

<input type="text" ... inputmode="none" />

या, यदि आप इसे स्क्रिप्ट में करना पसंद करते हैं:

$(selector).attr('inputmode', 'none');

मैंने इसका बड़े पैमाने पर परीक्षण नहीं किया है, लेकिन यह उन एंड्रॉइड सेटअपों पर अच्छी तरह से काम कर रहा है, जिनके साथ मैंने इसका उपयोग किया है।


मैं इस प्रोजेक्ट को ज्यादातर मोबाइल एंड्रॉइड के लिए कोड कर रहा था। Ymmv अन्य प्लेटफार्मों के साथ।
पीटर बोवर्स

-1

या, उदाहरण के लिए, आप मूल्य को संग्रहीत करने के लिए एक छिपे हुए क्षेत्र का उपयोग कर सकते हैं ...

        <asp:HiddenField ID="hfDay" runat="server" />

और $ ("# my_txtbox") में। डेटपिकर ({विकल्प:

        onSelect: function (dateText, inst) {
            $("#<% =hfDay.ClientID %>").val(dateText);
        }

-1

यदि आप चाहते हैं कि उपयोगकर्ता डेटपेकर से एक तारीख का चयन करें लेकिन आप नहीं चाहते कि उपयोगकर्ता टेक्स्टबॉक्स के अंदर टाइप करे तो निम्नलिखित कोड का उपयोग करें:

<script type="text/javascript">
$(function () {
    $("#datepicker").datepicker({ maxDate: "-1D" }).attr('readonly', 'readonly');
    $("#datepicker").readonlyDatepicker(true);

});

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.