इनपुट प्रकार = "दिनांक" फ़ील्ड के लिए प्लेसहोल्डर नहीं दिखा रहा है


120

मैं एक फोनगैप ऐप कर रहा हूं। जब मैं type="date"नीचे दिखाए गए अनुसार इनपुट क्षेत्र की कोशिश कर रहा हूं , तो यह iPhone में दिनांक पिकर दिखाता है जैसा कि मुझे उम्मीद थी लेकिन यह मेरे द्वारा दिए गए प्लेसहोल्डर को नहीं दिखाता है। मैं एक ही मुद्दे को एसओ में यहाँ पाया, लेकिन कहीं भी कोई समाधान नहीं।

 <input placeholder="Date" class="textbox-n" type="date" id="date">

stackoverflow.com/a/23683687/1783439 ने मेरे लिए काम किया
nu everest

जवाबों:


156

यह उचित नहीं हो सकता है ... लेकिन इसने मेरी मदद की।

<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" id="date">


7
एक अच्छी सुविधा की तरह लगता है, हालांकि क्षेत्र पर क्लिक करने से डेटस्क्रीन के बजाय ऑनस्क्रीन कीबोर्ड दिखाई देता है। हालांकि, कोशिश अच्छी थी।
मैथिज्स सीजर

2
@MathijsSegers ने आपको एक समाधान ढूंढा है जो कीबोर्ड को नहीं दिखाता है? मैंने यहां इस समाधान की कोशिश की, लेकिन आईओएस 6, 7 और 8 में, कीबोर्ड को थोड़े समय के लिए दिखाया गया है और फिर तारीख को दर्शाता है।
जबल मेकज़

7
खैर हाँ एक घृणित। मैंने डेटफ़ील्ड पर एक टेक्स्टफ़ील्ड के लुक के साथ एक स्पैन जोड़ा, जो इसे केवल आईओएस पर दिखाई दे रहा है। डेटपिकर का z इंडेक्स css में स्पैन से अधिक लेकिन अल्फा 0.01 से अधिक था। Onclick मैं datefield प्रकट होगा। यह काम करता है लेकिन थोड़े बुरा है।
मैथिज्स सीजर

4
मैंने देखा है कि यह iOS उपकरणों पर काम नहीं करता है, क्या किसी के पास इसके लिए कोई समाधान है?
मिकेल फेनफॉस

3
कॉर्डोबा ऐप के लिए, उपयोग onmouseenter बजाय घटना onFocus घटना है, तो, दिनांक पिकर पहले क्लिक पर खुलेगा
मुझे

88

यदि आप mvp की विधि का उपयोग करते हैं, लेकिन इसे ऑन करने के लिए onblur इवेंट को एक टेक्स्ट फ़ील्ड में वापस जोड़ें ताकि प्लेसहोल्डर टेक्स्ट फिर से दिखाई दे जब इनपुट फ़ील्ड फोकस खो देता है। यह सिर्फ हैक को थोड़ा सा अच्छा बनाता है।

<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date" />

उम्मीद है की यह मदद करेगा।


1
धन्यवाद! यह पूरी तरह से मेरे लिए काम किया! क्या मैं सुझाव दे सकता हूं कि फ़ील्ड को अक्षम कर दिया जाए, और फिर क्लिक पर अक्षम को हटा दिया जाए? मैं एंगुलर में काम कर रहा था, और टाइप बदलने के लिए एक स्कोप फंक्शन लिखा और डिसेबल को हटा दिया, अजीब तरह के कीड़े को रोक दिया जब वह किसी तरह टेक्स्ट फील्ड पर फोकस करता है
Torch2424

2
ज्यादा बेहतर उपाय। धन्यवाद
Profstyle

3
जब मैं ध्यान से बाहर हो जाता हूं, तो मैं प्लेसहोल्डर को देख सकता हूं, लेकिन डेट पिकर पाने के लिए, मुझे उस पर दो बार क्लिक करने की जरूरत है। मैं इसे कैसे सुलझाऊं?
सूरज

1
इसके लिए सबसे अच्छा समाधान जो मुझे मिला है, बहुत बहुत धन्यवाद
सैंडी

3
अच्छा! बहुत ही उचित समाधान। : DI आशा है कि जल्द ही HTML5 या HTML6 तारीखों में प्लेसहोल्डर्स को अनुमति देगा। लेकिन अभी के लिए, यह बहुत अच्छा काम है। : D
jehzlau

35

मैंने निम्नलिखित का उपयोग करके समाप्त किया।

फ़ायरफ़ॉक्स टिप्पणी के बारे में : आम तौर पर, फ़ायरफ़ॉक्स इनपुट प्रकार की तारीख के लिए कोई पाठ प्लेसहोल्डर नहीं दिखाएगा। लेकिन जैसा कि यह एक कॉर्डोवा / फोनगैप सवाल है, यह कोई चिंता का विषय नहीं होना चाहिए (जब तक आप फ़ायरफ़ॉक्स के खिलाफ विकसित नहीं करना चाहते)।

input[type="date"]:not(.has-value):before{
  color: lightgray;
  content: attr(placeholder);
}
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.className=(this.value!=''?'has-value':'')">


1
यह संस्करण अन्य वर्गों के साथ गड़बड़ नहीं करता है<input type="date" placeholder="MY PLACEHOLDER" onchange="this.classList.toggle('has-value',this.value);">
achairapart

अच्छा जवाब भाई, आप सबसे अच्छे हैं। मैं सिर दर्द होने तक जवाब ढूंढ रहा हूं। धन्यवाद
रोमन ट्रैवर्सिन

मैंने इसका इस्तेमाल किया और input[type="date"]:not(:focus):not(.has-value):beforeइनपुट को फ़ोकस करते समय प्रारूप दिखाने के लिए इसमें जोड़ा गया (चयन के बजाय तारीख टाइप करने वाले लोगों के लिए)
मार्को somefox

20

मैंने अपनी सीएसएस में इसका इस्तेमाल किया:

input[type="date"]:before{
    color:lightgray;
    content:attr(placeholder);
}

input[type="date"].full:before {
    color:black;
    content:""!important;
}

और कुछ इस तरह से जावास्क्रिप्ट में डाल दिया:

$("#myel").on("input",function(){
    if($(this).val().length>0){
    $(this).addClass("full");
}
else{
   $(this).removeClass("full");
   }
 });

यह मेरे लिए मोबाइल उपकरणों (Ios8 और android) के लिए काम करता है। लेकिन मैंने इनपुट पाठ प्रकार के साथ डेस्कटॉप के लिए jquery inputmask का उपयोग किया। यदि आपका कोड ie8 पर चलता है तो यह समाधान एक अच्छा तरीका है।


एंड्रॉइड में मेरे लिए यहां सबसे अच्छा विकल्प! अच्छा है!
जप्पेस्कु

अति उत्कृष्ट! बस आपको "पूर्ण" वर्ग की प्रारंभिक स्थिति निर्धारित करनी होगी, जैसे कि यदि आप किसी मौजूदा तारीख को संपादित कर रहे हैं।
bjnord

मेरा सुझाव है कि हमें color: #aaaiOS पर प्लेसहोल्डर जैसी उपस्थिति के लिए उपयोग करना चाहिए । color: lightgrayअभी बहुत हल्का है।
रॉकलाईट

बहुत बढ़िया जवाब! आप कोड को jQuery को टॉगलक्लास का उपयोग करके थोड़ा अधिक पठनीय बनाते हैं: $("#myel").on( "input" , function(){ $(this).toggleClass( "full" , $(this).val().length > 0 ); });
माइक

18

आज (2016) के रूप में, मैंने उन 2 स्निपेट्स का सफलतापूर्वक उपयोग किया है (साथ ही वे बूटस्ट्रैप 4 के साथ शानदार काम करते हैं)।

बाईं ओर इनपुट डेटा, बाईं ओर प्लेसहोल्डर

input[type=date] {
  text-align: right;
}

input[type="date"]:before {
  color: lightgrey;
  content: attr(placeholder) !important;
  margin-right: 0.5em;
}

क्लिक करते ही प्लेसहोल्डर गायब हो जाता है

input[type="date"]:before {
  color: lightgrey;
  content: attr(placeholder) !important;
  margin-right: 0.5em;
}
input[type="date"]:focus:before {
  content: '' !important;
}

साफ और बिना उपद्रव के काम करता है।
user12379095

11

HTML मानक के अनुसार :

निम्नलिखित सामग्री विशेषताओं को निर्दिष्ट नहीं किया जाना चाहिए और तत्व पर लागू नहीं होना चाहिए: स्वीकार करें, alt, check, dirname, formaction, formenctype, formmethod, formnovalidate, formtarget, height, inputmode, maxlength, minlength, एकाधिक, पैटर्न, प्लेसहोल्डर , आकार src, और चौड़ाई।


तो मुझे क्या करना चाहिए?
मुमताज़िर VP

2
@ mvp, आपको प्लेसहोल्डर विशेषता का उपयोग नहीं करना चाहिए, और इनपुट [प्रकार = दिनांक] से संबंधित एक <लेबल> तत्व डालना चाहिए।
int32_t

यह एक जगह धारक की तरह दिखना चाहिए?
मुमताज़िर VP

2
लेबल और प्लेसहोल्डर 2 अलग-अलग चीजें हैं। मुझे समझ नहीं आ रहा है कि आप यहाँ क्या सुझाव दे रहे हैं।
Adeynack

2
यह एकमात्र सही उत्तर है। +1। आश्चर्य है कि लोगों के साथ क्या हो रहा है! बस यह एक लक्ष्य से आगे आया और स्वीकार किए गए उत्तर पर वोटों की संख्या से चकित था :( चश्मा स्पष्ट रूप से कहता है कि शब्दों को निर्दिष्ट नहीं किया जाना चाहिए और लागू नहीं करना चाहिए , फिर भी लोग इसे अपने भद्दे वेब ऐप में बदलना चाहते हैं ।
अभिताक्स

10

इससे मेरा काम बनता है:

input[type='date']:after {
  content: attr(placeholder)
}

3
जब आपने किसी तिथि का चयन किया है, तो इसके साथ केवल समस्या प्लेसहोल्डर को निकाल रही है। स्थान धारक को हटाया नहीं जाता है।
egr103

IOS 9.3 पर, :afterएक तारीख का चयन होने पर, सफारी छद्म तत्व को गायब कर देगा। तो प्लेसहोल्डर को हटाने की कोई जरूरत नहीं है
रॉकलाईट

2
onfocus="(this.placeholder='')"तिथि चयनित होने के बाद प्लेसहोल्डर को निकालने के लिए बस जोड़ें ।
चक्रीय

अति उत्कृष्ट!!! मेरे लिए भी काम किया है, @RobbieNolan ने कहा कि ऑनफोकस को जोड़ने के लिए पूरी तरह से काम किया है।
ब्रूनो डी फारिया

9

मैंने इस सफ़ेद jQuery का उपयोग किया: http://jsfiddle.net/daviderussoabram/65w1qhLz/

$('input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"]').each(function() {
    var el = this, type = $(el).attr('type');
    if ($(el).val() == '') $(el).attr('type', 'text');
    $(el).focus(function() {
        $(el).attr('type', type);
        el.click();
    });
    $(el).blur(function() {
        if ($(el).val() == '') $(el).attr('type', 'text');
    });
});

कृपया स्पष्टीकरण जोड़ें कि यह क्यों मदद करेगा
जोहार

@ डेविड रुसो अब्राम: कृपया स्पष्टीकरण जोड़ें, यह कैसे काम करता है?
jsduniya

9

डेडप्रोसेसर और एलेसियो उत्तरों के आधार पर, मैं केवल CSS का उपयोग करने की कोशिश करूंगा:

input[type="date"]::before{
    color: #999;
    content: attr(placeholder) ": ";
}
input[type="date"]:focus::before {
    content: "" !important;
}

और यदि आपको इनपुट में कुछ लिखने के बाद प्लेसहोल्डर को अदृश्य बनाने की आवश्यकता है, तो हम: इनपुट: वैध और: अमान्य चयनकर्ताओं का उपयोग करने की कोशिश कर सकते हैं, यदि आपका इनपुट आवश्यक है।

संपादित करें

यहाँ कोड यदि आप अपने इनपुट में आवश्यक उपयोग कर रहे हैं:

input[type="date"]::before {
	color: #999999;
	content: attr(placeholder);
}
input[type="date"] {
	color: #ffffff;
}
input[type="date"]:focus,
input[type="date"]:valid {
	color: #666666;
}
input[type="date"]:focus::before,
input[type="date"]:valid::before {
	content: "" !important;
}
<input type="date" placeholder="Date" required>


9

अपनी समस्या को हल करने का एक बेहतर तरीका मिला। मुझे लगता है कि यह आपकी मदद करेगा। जब ध्यान केंद्रित किया जाता है, तो बॉक्स टेक्स्ट में टाइप बदल जाएगा, इसलिए यह आपके प्लेसहोल्डर को दिखाएगा। जब ध्यान केंद्रित किया जाता है, तो इसका प्रकार तिथि में बदल जाता है इसलिए कैलेंडर दृश्य दिखाया जाएगा।

<input placeholder="Date" class="textbox-n" type="text" onfocusin="(this.type='date')" onfocusout="(this.type='text')"  id="date"> 

ढेर अतिप्रवाह में आपका स्वागत है! कृपया यह बताने का प्रयास करें कि आपका समाधान कैसे काम करता है। देखें: मैं एक अच्छा जवाब कैसे लिखूं? । धन्यवाद
sɐunıɔ ןɐ qɐp

6

मैंने जार्बलो का विचार लिया, लेकिन मैंने एक onblur फ़ंक्शन में जोड़ा, तो मान केवल फ़ील्ड खाली होने पर उसका प्रकार बदलता है

<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.value == '' ? this.type='text' : this.type='date')" id="date">

3

वर्तमान सही उत्तर में समस्या को स्वीकार करना "फ़ील्ड पर क्लिक करने से तारीख के बजाय ऑनस्क्रीन कीबोर्ड दिखाता है":

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

<input placeholder="Date" type="text" onfocus="this.type='date';
                      this.setAttribute('onfocus','');this.blur();this.focus();">

यहां तक ​​कि इस कोड के साथ, iOS में (iOS 6, 7 और 8 पर परीक्षण किया गया) एक पल के लिए कीबोर्ड दिखाता है और फिर तारीख को दिखाता है। कीबोर्ड दिखाने का कोई तरीका नहीं है?
जबल मर्कज़

@ JabelMárquez आप कीबोर्ड को दिखाने से रोकने के लिए readonly = "true" का उपयोग कर सकते हैं ... इसलिए कुछ इस तरह: <input type = "text" name = "date" value = "" प्लेसहोल्डर = "date" readonly = true " onFocus = "this.removeAttribute ( 'केवल पढ़ने के लिए'); this.type = 'तारीख'; this.setAttribute ( 'onFocus', ''); this.blur (); this.focus ();">। मेरे लिए काम किया है।
23

3

मेरे समाधान की कोशिश करो। मैं यह जानने के लिए 'आवश्यक' विशेषता का उपयोग करता हूं कि इनपुट भरा है या नहीं और यदि मैं विशेषता 'प्लेसहोल्डर' से पाठ नहीं दिखाता हूं

//HTML
<input required placeholder="Date" class="textbox-n" type="date" id="date">

//CSS
input[type="date"]:not(:valid):before {
   content: attr(placeholder);
   // style it like it real placeholder
}

1
dd / mm / yyyy अभी भी क्रोम (70) पर प्रदर्शित किया जा रहा है।
शंखमांक

2

मुझे यह समझ लेने में थोड़ी देर लगी, इसे छोड़ दें type="text", और जोड़ दें onfocus="(this.type='date')", जैसा कि ऊपर दिखाया गया है।

मैं भी ऊपर उल्लिखित onBlur विचार पसंद करता हूं

<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">

आशा है कि यह किसी को भी मदद करता है जो ऊपर जा रहे व्हाट्सएप को इकट्ठा नहीं करता है


2

दिनांक इनपुट समस्या को संक्षेप में बताने के लिए:

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

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

तो, एक HTML जैसे:

<div class="date-input>
  <input id="myInput" type="date"> 
  <label for="myInput"> 
    <span class="place-holder">Enter a date</span> 
  </label>
</div>

के रूप में स्टाइल किया जा सकता है:

.date-input {
  display: inline-block;
  position: relative;
}
/* Fields overriding */
input[type=date] + label {
  position: absolute;  /* Same origin as the input, to display over it */
  background: white;   /* Opaque background to hide the input behind */
  left: 0;             /* Start at same x coordinate */
}

/* Common input styling */
input[type=date], label {  
  /* Must share same size to display properly (focus, etc.) */
  width: 15em;
  height: 1em;
  font-size: 1em;
}

ऐसे संबद्ध लेबल पर कोई भी घटना (क्लिक, फ़ोकस) फ़ील्ड पर ही परिलक्षित होगी, और इसलिए दिनांक इनपुट UI को ट्रिगर करें।

क्या आपको ऐसे समाधान का लाइव परीक्षण करना चाहिए, आप अपने टैबलेट या मोबाइल से इस कोणीय संस्करण को चला सकते हैं ।


2

इसलिए मैंने आखिरकार जो करने का फैसला किया है, वह यहाँ है और इसके सभी कार्य iPhone और Android सहित सभी ब्राउज़रों पर ठीक है।

$(document).ready(function(){

  $('input[type="date"]').each(function(e) {
    var $el = $(this), 
        $this_placeholder = $(this).closest('label').find('.custom-placeholder');
    $el.on('change',function(){
      if($el.val()){
        $this_placeholder.text('');
      }else {
        $this_placeholder.text($el.attr('placeholder'));
      }
    });
  });
  
});
label {
  position: relative;  
}
.custom-placeholder {
    #font > .proxima-nova-light(26px,40px);
    position: absolute;
    top: 0;
    left: 0;
    z-index: 10;
    color: #999;
}
<label>
  <input type="date" placeholder="Date">
  <span class="custom-placeholder">Date</span>
</label>

तारीख


2

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

<input placeholder="Date" class="textbox-n" type="text" onfocus=" (this.type='date')" onchange="this.blur();"  id="date"> 

2

आप ऐसा कर सकते हैं

  1. इसे टाइप टेक्स्ट के रूप में सेट करें
  2. फ़ोकस पर दिनांक परिवर्तित करें
  3. उस पर क्लिक करें
  4. ... उपयोगकर्ता को जांच की तारीख दें
  5. परिवर्तन पर मूल्य संग्रहीत करें
  6. टेक्स्ट टाइप करने के लिए इनपुट सेट करें
  7. संग्रहीत मान पर पाठ प्रकार इनपुट मान सेट करें

इस तरह...

$("#dateplaceholder").change(function(evt) {
  var date = new Date($("#dateplaceholder").val());
  $("#dateplaceholder").attr("type", "text");
  $("#dateplaceholder").val(date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear());
});
$("#dateplaceholder").focus(function(evt) {
  $("#dateplaceholder").attr("type", "date");
  setTimeout('$("#dateplaceholder").click();', 500);
});
$("#dateplaceholder").attr("type", "text");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="date" id="dateplaceholder" placeholder="Set the date" />


2

माउसओवर के साथ उपयोगकर्ता की बुनियादी समझ को संभालने के लिए एक बेहतर तरीका मिला और क्लिक पर डेटपिकर खोलने का तरीका:

<input type="text" onfocus="(this.type='date')" onmouseover="(this.type = 'date')" onblur="(this.value ? this.type = 'date' : this.type = 'text')" id="date_start" placeholder="Date">

वेबकिट एरो को भी छुपाएं और क्लिक को कवर करने के लिए इसे 100% चौड़ा करें:

input[type="date"] {
    position: relative;
}
input[type="date"]::-webkit-calendar-picker-indicator {
  position: absolute;
  height: 100%;
  width: 100%;
  opacity: 0;
  left: 0;
  right: 0;
  top:0;
  bottom: 0;
}

1

कोणीय दृष्टि से मैं इनपुट प्रकार तिथि तत्व में प्लेसहोल्डर डालने में कामयाब रहा।

सबसे पहले मैंने निम्नलिखित सीएसएस को परिभाषित किया:

.placeholder {
    color: $text-grey;
  }

  input[type='date']::before {
    content: attr(placeholder);
  }

  input::-webkit-input-placeholder {
    color: $text-grey;
  }

यही कारण है कि यह अशांतिपूर्ण है कि अगर css3 सामग्री का अलग-अलग रंग है जो सामान्य प्लेसहोल्डर है, इसलिए मुझे एक आम का उपयोग करना पड़ा।

<input #birthDate
         class="birthDate placeholder"
         type="date"
         formControlName="birthDate"
         placeholder="{{getBirthDatePlaceholder() | translate}}"
         [class.error]="!onboardingForm.controls.birthDate.valid && onboardingForm.controls.birthDate.dirty"
         autocomplete="off"
         >

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

@ViewChild('birthDate') birthDate;

getBirthDatePlaceholder() {
  if (!this.birthDate) {
    return;
  } else {
    return this.birthDate.nativeElement.value === '' ?
    'ONBOARDING_FORM_COMPONENT.HINT_BIRTH_DATE' :
    '';
  }
}


1

मुझे आश्चर्य है कि मेरे द्वारा उपयोग किए गए दृष्टिकोण के समान केवल एक ही उत्तर है।
मुझे @Mumthezir VP के उत्तर पर @ Dtipson की टिप्पणी से प्रेरणा मिली।

मैं इसके लिए दो इनपुट का उपयोग करता हूं, एक एक नकली इनपुट type="text"है जिसके साथ मैं प्लेसहोल्डर सेट करता हूं, दूसरा एक वास्तविक फ़ील्ड है type="date"। उनके कंटेनर
की mouseenterघटना पर, मैं नकली इनपुट छिपाता हूं और वास्तविक दिखाता हूं, और मैं mouseleaveघटना पर विपरीत काम करता हूं । जाहिर है, मैं वास्तविक इनपुट विज़िबिल को छोड़ देता हूं अगर उस पर एक मूल्य निर्धारित है।
मैंने शुद्ध जावास्क्रिप्ट का उपयोग करने के लिए कोड लिखा था लेकिन अगर आप jQuery (I do) का उपयोग करते हैं तो इसे "रूपांतरित" करना बहुत आसान है।

// "isMobile" function taken from this reply:
// https://stackoverflow.com/a/20293441/3514976
function isMobile() {
  try { document.createEvent("TouchEvent"); return true; }
  catch(e) { return false; }
}

var deviceIsMobile = isMobile();

function mouseEnterListener(event) {
  var realDate = this.querySelector('.real-date');
  // if it has a value it's already visible.
  if(!realDate.value) {
    this.querySelector('.fake-date').style.display = 'none';
    realDate.style.display = 'block';
  }
}

function mouseLeaveListener(event) {
  var realDate = this.querySelector('.real-date');
  // hide it if it doesn't have focus (except
  // on mobile devices) and has no value.
  if((deviceIsMobile || document.activeElement !== realDate) && !realDate.value) {
    realDate.style.display = 'none';
    this.querySelector('.fake-date').style.display = 'block';
  }
}

function fakeFieldActionListener(event) {
  event.preventDefault();
  this.parentElement.dispatchEvent(new Event('mouseenter'));
  var realDate = this.parentElement.querySelector('.real-date');
  // to open the datepicker on mobile devices
  // I need to focus and then click on the field.
  realDate.focus();
  realDate.click();
}

var containers = document.getElementsByClassName('date-container');
for(var i = 0; i < containers.length; ++i) {
  var container = containers[i];
  
  container.addEventListener('mouseenter', mouseEnterListener);
  container.addEventListener('mouseleave', mouseLeaveListener);
  
  var fakeDate = container.querySelector('.fake-date');
  // for mobile devices, clicking (tapping)
  // on the fake input must show the real one.
  fakeDate.addEventListener('click', fakeFieldActionListener);
  // let's also listen to the "focus" event
  // in case it's selected using a keyboard.
  fakeDate.addEventListener('focus', fakeFieldActionListener);
  
  var realDate = container.querySelector('.real-date');
  // trigger the "mouseleave" event on the
  // container when the value changes.
  realDate.addEventListener('change', function() {
    container.dispatchEvent(new Event('mouseleave'));
  });
  // also trigger the "mouseleave" event on
  // the container when the input loses focus.
  realDate.addEventListener('blur', function() {
    container.dispatchEvent(new Event('mouseleave'));
  });
}
.real-date {
  display: none;
}

/* a simple example of css to make 
them look like it's the same element */
.real-date, 
.fake-date {
  width: 200px;
  height: 20px;
  padding: 0px;
}
<div class="date-container">
  <input type="text" class="fake-date" placeholder="Insert date">
  <input type="date" class="real-date">
</div>

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

मेरे पास इसका परीक्षण करने के लिए iOS डिवाइस नहीं है।


0

मन में विनीत जावास्क्रिप्ट के साथ @ mvp के समाधान पर विस्तार, यहाँ दृष्टिकोण है:

HTML:

<input type="text" placeholder="Date" class="js-text-date-toggle">

जावास्क्रिप्ट:

$('.js-text-date-toggle').on('focus', function() {
  $(this).attr('type', 'date') }
).on('blur', function() {
  $(this).attr('type'), 'text') }
)

0

मुझे लगता है कि आपको यह करना होगा कि दिनांक फ़ील्ड को अशक्त कहने के लिए मॉडल को बदलना है और फिर यदि आवश्यक हो तो उस पर [आवश्यक] डाल दें। यदि आप ऐसा करते हैं तो प्लेसहोल्डर टेक्स्ट दिखाई नहीं देता है।


0

अरे तो मैं कल रात एक ही मुद्दे पर भाग गया और आपके उत्तर के सभी का संयोजन किया और कुछ शानदार जादू एक अच्छा काम कर रहे हैं:

HTML:

<input type="date"  name="flb5" placeholder="Datum"     class="datePickerPlaceHolder"/>

सीएसएस:

@media(max-width: 1024px) {
   input.datePickerPlaceHolder:before {
      color: #A5A5A5; //here you have to match the placeholder color of other inputs
      content: attr(placeholder) !important;
   }
}

JQuery:

$(document).ready(function() {
    $('input[type="date"]').change(function(){
            if($(this).val().length < 1) {
                $(this).addClass('datePickerPlaceHolder');
            } else {
                $(this).removeClass('datePickerPlaceHolder');
            }
    });
});

स्पष्टीकरण: तो, यहाँ क्या हो रहा है, सबसे पहले HTML में , यह बहुत सीधा है बस एक बुनियादी HMTL5-date-input कर और एक प्लेसहोल्डर सेट करें। अगला पड़ाव: सीएसएस , हम एक सेट कर रहे हैं: पहले-छद्म तत्व हमारे प्लेसहोल्डर को नकली करने के लिए, यह केवल इनपुट से प्लेसहोल्डर की विशेषता लेता है। मैंने इसे केवल 1024px की व्यूपोर्ट चौड़ाई से नीचे उपलब्ध कराया - क्यों बाद में बताने जा रहा हूं। और अब jQuery , एक दो बार रिफ्लेक्ट करने के बाद मैं इस बिट कोड के साथ आया, जो हर बदलाव पर जांच करेगा कि क्या कोई वैल्यू सेट है या नहीं, अगर नहीं तो यह फिर से क्लास को जोड़ देगा, इसके विपरीत ।

जानते हैं:

  • इसकी डिफ़ॉल्ट तिथि-चयनकर्ता के साथ क्रोम में एक समस्या है, जो कि मीडिया-क्वेरी के लिए है। यह डिफॉल्ट के प्लेसहोल्डर को 'dd.mm.yyyy'-thing से जोड़ेगा। आप दिनांक-इनपुट के प्लेसहोल्डर को 'तिथि:' पर ​​भी सेट कर सकते हैं और इनपुट के अंदर कोई मान नहीं होने के रंग आवेग को समायोजित कर सकते हैं ... मेरे लिए यह कुछ अन्य छोटे मुद्दों के परिणामस्वरूप था, इसलिए मैं इसे 'बड़ा' नहीं दिखा रहा था 'स्क्रीन

उम्मीद है की वो मदद करदे! राम-राम!


0

यदि आप केवल मोबाइल से संबंधित हैं:

input[type="date"]:invalid:before{
    color: rgb(117, 117, 117);
    content: attr(placeholder);
}

0

HTML:

<div>
    <input class="ui-btn ui-btn-icon-right ui-corner-all ui-icon-calendar ui-shadow" id="inputDate" type="date"/>
    <h3 id="placeholder-inputDate">Date Text</h3>
</div>

जावास्क्रिप्ट:

$('#inputDate').ready(function () {
$('#placeholder-inputDate').attr('style'
    , 'top: ' + ($('#placeholder-inputDate').parent().position().top + 10)
    + 'px; left: ' + ($('#placeholder-inputDate').parent().position().left + 0) + 'px; position: absolute;');
$('#inputDate').attr('style'
    , 'width: ' + ($('#placeholder-inputDate').width() + 32) + 'px;');
});

बिना किसी स्पष्टीकरण के पोस्टिंग कोड का यहाँ स्वागत नहीं है। कृपया अपनी पोस्ट को संपादित करें।
सीआईडी

0

यहां एक और संभव हैक है जो जेएस का उपयोग नहीं कर रहा है और अभी भी सीएसएस का उपयोग कर रहा है content। ध्यान दें कि :afterइनपुट के लिए कुछ ब्राउज़र पर समर्थित नहीं है, हमें उसी तरह से इनपुट का चयन करना होगाcontent attr('')

input[type=date]:invalid+span:after {
  content:"Birthday";
  position:absolute;
  left:0;
  top:0;
}

input[type=date]:focus:invalid+span:after {
  display:none;
}

input:not(:focus):invalid {
  color:transparent;
}

label.wrapper {
	position:relative;
}
<label class="wrapper">
	<input
 	  type="date"
  	  required="required" 
	/>
	<span></span>
</label>


0

यह मेरे लिए इनपुट तत्व के रूप में काम करता है:

<input name="birthdate" class="" class="wpcf7-form-control wpcf7-date 
 wpcf7-validates-as-required wpcf7-validates-as-date birthdate" value="" 
 aria-required="true" aria-invalid="false" placeholder="birthdate *" 
 type="date">

यह CSS एक स्थायी प्लेसहोल्डर दिखाता है। चयनित मान प्लेसहोल्डर के बाद दिखाया गया है।

input[type="date"]:before {
    content: attr(placeholder) !important;
    margin-right: 0.5em;
    display: block;
}
/* only for FF */
@-moz-document url-prefix() {
    input[type="date"]:before {
        content: attr(placeholder) !important;
        margin-right: 0.5em;
        display: block;
        position: absolute;
        left: 200px; /* please adopt */
    }
}

मैं संपर्क-प्रपत्र -7 प्लगइन के साथ एक वर्डप्रेस फॉर्म के लिए इस समाधान का उपयोग करता हूं।


यह moz उपसर्ग मेरे लिए FF में काम नहीं कर रहा है: /
saomi

0

IOS 12 में क्रोम पर कोई भी समाधान मेरे लिए सही तरीके से काम नहीं कर रहा था और उनमें से अधिकांश एक पृष्ठ पर संभावित एकाधिक तिथि इनपुट के साथ सामना करने के लिए अनुरूप नहीं हैं। मैंने निम्नलिखित कार्य किया, जो मूल रूप से डेट इनपुट पर एक नकली लेबल बनाता है और इसे टैप पर हटा देता है। अगर व्यूपोर्ट की चौड़ाई 992px से परे है तो मैं भी नकली लेबल हटा रहा हूं।

जे एस:

function addMobileDatePlaceholder() {
    if (window.matchMedia("(min-width: 992px)").matches) {
        $('input[type="date"]').next("span.date-label").remove();
        return false;
    }

    $('input[type="date"]').after('<span class="date-label" />');

    $('span.date-label').each(function() {
        var $placeholderText = $(this).prev('input[type="date"]').attr('placeholder');
        $(this).text($placeholderText);
    });

    $('input[type="date"]').on("click", function() {
        $(this).next("span.date-label").remove();
    });
}

सीएसएस:

@media (max-width: 991px) {
    input[type="date"] {
        padding-left: calc(50% - 45px);
    }

    span.date-label {
        pointer-events: none;
        position: absolute;
        top: 2px;
        left: 50%;
        transform: translateX(-50%);
        text-align: center;
        height: 27px;
        width: 70%;
        padding-top: 5px;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.