एक textarea के प्लेसहोल्डर विशेषता के अंदर लाइन ब्रेक डालें?


179

मैं कुछ दृष्टिकोण की कोशिश की है, लेकिन कोई काम नहीं किया। किसी को भी यह चारों ओर पाने के लिए एक निफ्टी चाल पता है?

<textarea placeholder='This is a line \n this should be a new line'></textarea>

<textarea placeholder='This is a line     
should this be a new line?'></textarea> <!-- this works in chrome apparently -->

अद्यतन: यह क्रोम में काम नहीं करता है। यह सिर्फ बनावट की चौड़ाई थी।

देखें: http://jsfiddle.net/pdXRx/


2
अगर PHP का उपयोग करते हैं, तो आप <?="\n"?>एक नई लाइन के रूप में डाल सकते हैं
rybo111

39
बस &#10;प्लेसहोल्डर विशेषता में जोड़ें , जैसे <textarea placeholder="This is a line&#10;This is another one"></textarea>। जवाब नीचे है।
lu1s

4
@ lu1 यह क्रोम, IE में काम करता है लेकिन फ़ायरफ़ॉक्स और सफारी में नहीं।
mb21

1
@ mb21 मैंने फ़ायरफ़ॉक्स 60.0.2 में एक मिनट पहले इसका परीक्षण किया है और अब यह काम करता है। शायद यह अब अधिकांश ब्राउज़रों में काम करेगा।
tsuma534

3
यह 2020 है और अभी भी सफारी के लिए कोई समाधान नहीं है?
Öमर एक

जवाबों:


61

आप जो कुछ भी कर सकते हैं वह पाठ को जोड़ने के लिए है value, जो लाइन ब्रेक का सम्मान करता है \n

$('textarea').attr('value', 'This is a line \nthis should be a new line');

तब आप इसे हटा सकते हैं focusऔर इसे वापस (यदि खाली हो) लागू कर सकते हैं blur। कुछ इस तरह

var placeholder = 'This is a line \nthis should be a new line';
$('textarea').attr('value', placeholder);

$('textarea').focus(function(){
    if($(this).val() === placeholder){
        $(this).attr('value', '');
    }
});

$('textarea').blur(function(){
    if($(this).val() ===''){
        $(this).attr('value', placeholder);
    }    
});

उदाहरण: http://jsfiddle.net/airandfingers/pdXRx/247/

शुद्ध सीएसएस नहीं और साफ नहीं है लेकिन चाल है।


4
मैं निश्चित रूप से जावास्क्रिप्ट का उपयोग करके प्लेसहोल्डर प्रभाव को नकली कर सकता हूं, लेकिन मुझे कुछ और सरल की उम्मीद थी
amosrivera

2
दुर्भाग्य से, @amosrivera, कोई मानक तरीका प्रतीत नहीं होता है: developer.mozilla.org/en/HTML/HTML5/… , एक स्क्रिप्ट किए गए वर्कअराउंड के अलावा।
जेसन जेनारो

3
अच्छा समाधान है, लेकिन मैं जोड़ना होगा if($(this).val() == 'This is...')करने के लिए focus, हैंडलर अन्यथा यदि आप कुछ पाठ है, तो फोकस खो जोड़ने के लिए, उसके बाद फिर से पाठ क्षेत्र पर क्लिक करें, अपने पाठ गायब हो जाता है।
डेनिस गोलोमेज़ोव

2
@DenisGolomazov अच्छा जोड़; मैंने अभी फोकस हैंडलर में चेक के साथ एक एडिट जमा किया है। मैं एक प्लेसहोल्डर वर्ग और स्टाइलिंग प्लेसहोल्डर्स को अलग-अलग जोड़ने की भी सिफारिश करता हूं, जैसा कि इस अपडेट में मेरे संशोधित jsfiddle उदाहरण में दिखाया गया है: jsfiddle.net/airandfingers/pdXRx/249
हारून

क्या होगा यदि उपयोगकर्ता ने इनपुट बनाया जो कि प्लेसहोल्डर टेक्स्ट से बिल्कुल मेल खाता है, तो क्या वह भी मिट नहीं जाएगा?
अर्जुन

274

आप &#10;प्लेसहोल्डर विशेषता के अंदर एक नई पंक्ति HTML इकाई सम्मिलित कर सकते हैं :

<textarea name="foo" placeholder="hello you&#10;Second line&#10;Third line"></textarea>

इस पर काम करता है: क्रोम 62, IE10, फ़ायरफ़ॉक्स 60

पर काम नहीं करता है: सफारी 11

https://jsfiddle.net/lu1s/bxkjLpag/2/


7
यह वही करता है जो मूल प्रश्न के लिए पूछा गया था। यह उच्च मतदान क्यों नहीं है? क्या यह हर ब्राउज़र में काम नहीं करता है?
डेवलेगर

9
@DaveAlger - वास्तव में यह नहीं है। मैंने सिर्फ एफएफ में इसकी कोशिश की और यह &#10;व्हाट्सएप चरित्र का निर्माण किए बिना, शाब्दिक रूप से प्रिंट करता है । देखें डेवलपर.
mozilla.org/en/HTML/HTML5/…

1
IE10 और Chrome 62 पर काम करता है
miny1997

1
फ़ायरफ़ॉक्स के नए संस्करणों में बहुत अच्छी तरह से काम करता है
ii iml0sto1

10
फ़ायरफ़ॉक्स 60 में काम करता है।
रॉब पोर्टर

57

ऐसा मत सोचो कि आपको ऐसा करने की अनुमति है: http://www.w3.org/TR/html5/forms.html#the-placeholder-attribute

संबंधित सामग्री (जोर मेरा):

प्लेसहोल्डर विशेषता एक छोटे संकेत (एक शब्द या संक्षिप्त वाक्यांश) का प्रतिनिधित्व करती है जिसका उद्देश्य उपयोगकर्ता को डेटा प्रविष्टि के साथ सहायता करना है जब नियंत्रण का कोई मूल्य नहीं है। एक संकेत नमूना मूल्य या अपेक्षित प्रारूप का एक संक्षिप्त विवरण हो सकता है। निर्दिष्ट की गई विशेषता का मान होना चाहिए, जिसमें कोई U + 000A LINE FEED (LF) या U + 000D CARRAGE RETURN (CR) वर्ण नहीं हैं।


@amosrivera हम्म। ठीक है, विक्रेताओं को फैशन में कल्पना की व्याख्या करने की अनुमति है जो वे फिट देखते हैं।
टायसन टी।

10
im एक उपकरण, यह एक लाइन तोड़ने की तरह लग रहा था, लेकिन वास्तव में यह सिर्फ प्लेसहोल्डर textarea चौड़ाई के चारों ओर लपेट रहा था ..
amosrivera

3
@amosrivera LOL, कम से कम आप इसके बारे में हंस सकते हैं, है ना? कोशिश करने से कुछ नहीं खोया ...:]
टिसन टी।

1
उत्तर सही है। लेकिन मैं नियम को पूरी बकवास मानता हूं। "LR या CR नहीं होना चाहिए" के लिए सटीक तर्क क्या है?
जेन्स ए। कोच

2
@ जेन्स-आंद्रेकोक मैं मानता हूं कि एक प्लेसहोल्डर सरल होना चाहिए; यदि मान लाइन-ब्रेक की आवश्यकता के लिए पर्याप्त जटिल है, तो यह एक तत्व के रूप में मौजूद होना चाहिए, जैसा कि आप देखते हैं कि आप इस टिप्पणी संपादक द्वारा "शो मदद" लिंक को सक्रिय करते हैं। एक प्लेसहोल्डर तब दिखाई नहीं देता जब एक इनपुट में सामग्री होती है, आखिर ...
टिसन टी।

54

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


एक अच्छा सा हैक

यह अच्छा नहीं लगता है, लेकिन आप नई लाइनों को html में डाल सकते हैं। ऐशे ही:

<textarea rows="6" id="myAddress" type="text" placeholder="My Awesome House,
        1 Long St
        London
        Postcode
        UK"></textarea>

ध्यान दें कि प्रत्येक पंक्ति एक नई रेखा पर है (लिपटे हुए नहीं है) और प्रत्येक 'टैब' इंडेंट 4 रिक्त स्थान है। दी यह एक बहुत अच्छी विधि नहीं है, लेकिन यह काम करने लगता है:

http://jsfiddle.net/01taylop/HDfju/

  • यह संभावना है कि आपके पाठ क्षेत्र की चौड़ाई के आधार पर प्रत्येक पंक्ति का इंडेंट स्तर अलग-अलग होगा।
  • resize: none;सीएसएस में होना जरूरी है ताकि टेक्सटेरिया का आकार तय हो जाए (देखें jsfiddle)।

वैकल्पिक रूप से जब आप एक नई लाइन चाहते हैं, तो दो बार हिट करें (इसलिए आपकी 'नई लाइनों' के बीच एक खाली लाइन है। इस 'खाली लाइन' को बनाने के लिए पर्याप्त टैब्स / स्पेस की जरूरत होती है जो आपके टेक्सारिया की चौड़ाई के बराबर होगा। लगता है अगर आप बहुत दूर है, तो आपको बस पर्याप्त चाहिए। यह इतना गंदा है और शायद ब्राउज़र अनुरूप नहीं है। मैं चाहता हूं कि एक आसान तरीका था!


एक बेहतर उपाय

JSFiddle बाहर की जाँच करें ।

  • यह समाधान textarea के पीछे एक div स्थिति।
  • कुछ जावास्क्रिप्ट का उपयोग टेक्स्टारिया की पृष्ठभूमि का रंग बदलने के लिए किया जाता है, जो प्लेसहोल्डर को उचित रूप से छिपाते या प्रकट करते हैं।
  • इनपुट्स और प्लेसहोल्डर्स का फॉन्ट साइज़ एक जैसा होना चाहिए, इसलिए दोनों का मिश्रण होता है।
  • box-sizingऔर display: blockपाठ क्षेत्र पर गुण महत्वपूर्ण हैं या इसके पीछे div एक ही आकार नहीं होगा।
  • टेक्स्टारिया पर सेटिंग resize: verticalऔर min-heightऑन भी महत्वपूर्ण हैं - ध्यान दें कि प्लेसहोल्डर टेक्स्ट कैसे लपेटेगा और टेक्सारिया का विस्तार करने से सफेद पृष्ठभूमि बनी रहेगी। हालाँकि, resizeसंपत्ति के बारे में टिप्पणी करना टेस्सर को क्षैतिज रूप से विस्तारित करने पर समस्या पैदा करेगा।
  • बस यह सुनिश्चित करें कि टेक्स्टारिया पर न्यूनतम ऊंचाई आपके पूरे प्लेसहोल्डर को उसकी सबसे छोटी चौड़ाई पर कवर करने के लिए पर्याप्त है। **

JSFiddle स्क्रीनशॉट

HTML:

<form>
  <input type='text' placeholder='First Name' />
  <input type='text' placeholder='Last Name' />
  <div class='textarea-placeholder'>
    <textarea></textarea>
    <div>
      First Line
      <br /> Second Line
      <br /> Third Line
    </div>
  </div>
</form>

एससीएसएस:

$input-padding: 4px;

@mixin input-font() {
  font-family: 'HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;
  font-size: 12px;
  font-weight: 300;
  line-height: 16px;
}

@mixin placeholder-style() {
  color: #999;
  @include input-font();
}

* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

form {
  width: 250px;
}

input,textarea {
  display: block;
  width: 100%;
  padding: $input-padding;
  border: 1px solid #ccc;
}

input {
  margin-bottom: 10px;
  background-color: #fff;

  @include input-font();
}

textarea {
  min-height: 80px;
  resize: vertical;
  background-color: transparent;
  &.data-edits {
    background-color: #fff;
  }
}

.textarea-placeholder {
  position: relative;
  > div {
    position: absolute;
    z-index: -1;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    padding: $input-padding;
    background-color: #fff;
    @include placeholder-style();
  }
}

::-webkit-input-placeholder {
  @include placeholder-style();
}
:-moz-placeholder {
  @include placeholder-style();
}
::-moz-placeholder {
  @include placeholder-style();
}
:-ms-input-placeholder {
  @include placeholder-style();
}

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

$("textarea").on('change keyup paste', function() {
  var length = $(this).val().length;
  if (length > 0) {
    $(this).addClass('data-edits');
  } else {
    $(this).removeClass('data-edits');
  }
});

एक बहुत प्यारा हैक। यह निश्चित रूप से क्रोम में काम करता है। क्या हम इसकी पुष्टि कर सकते हैं कि यह अन्य सभी प्रमुख ब्राउज़रों में समान है?
मार्क अमेरी

2
मैं किसी को IE में इसका परीक्षण करना पसंद करूंगा। मैं पुष्टि कर सकता हूं कि यह सफारी और क्रोम के सबसे हाल के संस्करणों पर काम करता है लेकिन निश्चित रूप से फ़ायरफ़ॉक्स नहीं है। मैं अब प्लेसहोल्डर के बजाय टेक्स्ट का उपयोग करता हूं और टेक्स्ट को प्लेसहोल्डर की तरह दिखने के लिए एक सीएसएस क्लास है। तब पाठ को साफ़ करने के लिए एक छोटा jQuery फ़ंक्शन जब यह फ़ोकस होता है - या खाली होने पर इसे वापस रख देता है!
पैट्रिक

2
Chrome और IE 11 में ठीक काम करता है। लेकिन फ़ायरफ़ॉक्स और एंड्रॉइड डिफ़ॉल्ट ब्राउज़र पर काम नहीं करता है।
केमिकल प्रोग्रामर

1
सफारी, फ़ायरफ़ॉक्स, ओपेरा पर काम नहीं कर रहा है। केवल क्रोम में काम करता है :(
by0

1
यह स्वीकृत उत्तर होना चाहिए, क्योंकि वर्तमान फॉर्म के साथ "प्लेसहोल्डर" मान जमा कर सकता है। नोट: "एक बेहतर समाधान" के तहत समाधान सही ढंग से ब्राउज़र को पार करता है। अलग-अलग कह रही टिप्पणियों को "ए नाइस लिटिल हैक" का उल्लेख करना चाहिए।
रॉय

15

कैसे एक सीएसएस समाधान के बारे में: http://cssdeck.com/labs/07fwgrso

::-webkit-input-placeholder::before {
  content: "FIRST\000ASECOND\000ATHIRD";
}

::-moz-placeholder::before {
  content: "FIRST\000ASECOND\000ATHIRD";
}

:-ms-input-placeholder::before {
  content: "FIRST\000ASECOND\000ATHIRD";
}

2
यह यहां सूचीबद्ध सभी आईएमओ का सबसे अच्छा समाधान है।
aendrew

यह समाधान फ़ायरफ़ॉक्स (22.0-28.0b9 पर परीक्षण) में काम नहीं करता है।
हार्टविग

@ हर्टविग मैं वास्तव में एक ही देखा। किसी कारण से फ़ायरफ़ॉक्स इसे सही ढंग से नहीं संभालता है। वास्तव में यह IE पर काम नहीं करता है या तो ==> दुर्भाग्य से यह केवल WebKit है।
समुली हकोनोमी

15

सलामुन अलेउम

&#10;

Google Chrome के लिए काम करता है

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

<textarea placeholder="Enter Choice#1 &#10;Enter Choice#2 &#10;Enter Choice#3"></textarea>

मैंने इसे विंडोज 10.0 (बिल्ड 10240) और गूगल क्रोम संस्करण 47.0.2526.80 मीटर पर परीक्षण किया

08:43:08 एएसटी 6 रबी अल-अव्वल, 1437 गुरुवार, 17 दिसंबर 2015

धन्यवाद


10

ब्रेकिंग लाइन के लिए केवल & # 10 जोड़ें, कोई सीएसएस या जावास्क्रिप्ट लिखने की आवश्यकता नहीं है।

textarea{
    width:300px;
    height:100px;

}
<textarea placeholder='This is a line this &#10should be a new line'></textarea>

<textarea placeholder=' This is a line 

should this be a new line?'></textarea>


9

पुराना उत्तर:

नहीं, आप प्लेसहोल्डर विशेषता में ऐसा नहीं कर सकते। आप html &#13;&#10;को किसी प्लेसहोल्डर की तरह नई संख्याओं को एनकोड नहीं कर सकते ।

नया उत्तर:

आधुनिक ब्राउज़र आपको ऐसा करने के कई तरीके देते हैं। इसे देखें JSFiddle:

http://jsfiddle.net/pdXRx/5/


मददगार बेला! समाधान 2 वास्तव में सफारी में काम करता है।
बालूमींज पॉइंट


6

इसे इस्तेमाल करे:

<textarea
placeholder="Line1&#x0a;&#x09;&#x09;&#x09;Line2"
cols="10"
rows="5"
style="resize:none">
</textarea>

http://jsfiddle.net/vr79B/


यह केवल 1 वाक्य के बाद कुछ स्थान को टैब कर रहा है, और अधिक कॉल या लचीली चौड़ाई पर उपयोग नहीं किया जा सकता है।
जेफरी नियो

5

आप इसे शुद्ध HTML के साथ नहीं कर सकते, लेकिन यह jQuery प्लगइन आपको देगा: https://github.com/bradjasper/jQuery-Placeholder-Newlines


नाइस, मेरे लिए काम करता है, मैंने मानक jquery.placeholder को मैथियस द्वारा इस एक के साथ बदल दिया और इन कॉल्स को बदलना पड़ा: इसके $('input, textarea').placeholder();साथ$('input[placeholder], textarea[placeholder]').placeholder();
ryan2johnson9

4

जेसन जेनारो के उत्तर का थोड़ा उन्नत संस्करण (कोड टिप्पणियाँ देखें):

var placeholder = 'This is a line \nthis should be a new line';
$('textarea').attr('value', placeholder);
$('textarea').focus(function(){
    if($(this).val() == placeholder){
        // reset the value only if it equals the initial one    
        $(this).attr('value', '');
    }
});
$('textarea').blur(function(){
    if($(this).val() == ''){
        $(this).attr('value', placeholder);
    }    
});
// remove the focus, if it is on by default
$('textarea').blur();

4

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

http://jsfiddle.net/pdXRx/297/

<h1>Demo: 5 different textarea placeholder behaviors from a single JS</h1>

<h2>Modified behaviors</h2>

<!-- To get simulated placeholder with New Lines behavior,
     add the placeholdernl attribute -->

<textarea placeholdernl>    (click me to demo)
Johnny S. Fiddle
248 Fake St.
Atlanta, GA 30134</textarea>

<textarea placeholder='Address' placeholdernl>    (click me to demo)
Johnny S. Fiddle
248 Fake St.
Atlanta, GA 30134</textarea>

<h2>Standard behaviors</h2>

<textarea placeholder='Address'>    (delete me to demo)
Johnny S. Fiddle
248 Fake St.
Atlanta, GA 30134</textarea>

<textarea>    (delete me to demo)
Johnny S. Fiddle
248 Fake St.
Atlanta, GA 30134</textarea>

<textarea placeholder='Address'></textarea>

जावास्क्रिप्ट बहुत सरल है

<script>
(function($){
var handleFocus = function(){
    var $this = $(this);
    if($this.val() === $this.attr('placeholdernl')){
        $this.attr('value', '');
        $this.css('color', '');
    }
};

var handleBlur = function(){
    var $this = $(this);
    if($this.val() == ''){
        $this.attr('value', $this.attr('placeholdernl'))
        $this.css('color', 'gray');
    }    
};

$('textarea[placeholdernl]').each(function(){
    var $this = $(this),
        value = $this.attr('value'),
        placeholder = $this.attr('placeholder');
    $this.attr('placeholdernl', value ? value : placeholder);
    $this.attr('value', '');
    $this.focus(handleFocus).blur(handleBlur).trigger('blur');
});
})(jQuery);
</script>

2

एचटीएमएल

<textarea data-placeholder="1111\n2222"></textarea>

जे एस

$('textarea[data-placeholder]').each(function(){
    var $this = $(this),
        placeholder = $this.data('placeholder'),
        placeholderSplit = placeholder.split('\\n');
    placeholder = placeholderSplit.join('\n');
    $this.focus(function(){
        var $this = $(this);
        if($this.val() === placeholder){
            $this.val('');
            // $this.removeClass('placeholder');
        }
    }).blur(function(){
        var $this = $(this);
        if($this.val() == '') {
            $this.val(placeholder);
            // $this.addClass('placeholder');
        }
    }).trigger('blur');
});

2

Textarea प्लेसहोल्डर के लिए सफेद-स्थान विशेषता का सम्मान करता है। https://www.w3schools.com/cssref/pr_text_white-space.asp

इसे प्री-लाइन में सेट करने से मेरे लिए समस्या हल हो गई।

textarea {
  white-space: pre-line;
}
<textarea placeholder='This is a line     
should this be a new line'></textarea>


1

मैंने इस तरह से @Richard Bronosky की फ़ाइडल को संशोधित किया ।

data-*कस्टम विशेषता के बजाय विशेषता का उपयोग करना बेहतर है । मैंने प्रतिस्थापित <textarea placeholdernl>किया <textarea data-placeholder>और कुछ अन्य शैलियों को भी।

संपादित
यहां रिचर्ड का मूल उत्तर है जिसमें पूर्ण कोड स्निपेट है।


1
यह बेहतर है कि जब भी आप एक jsfiddle को शामिल करें, तो यहां भी समझाएं और कोड पेस्ट करें, इसलिए हमारे पास इसे आगे के संदर्भ के लिए है और हमें यह भरोसा नहीं करना है कि सामग्री हमेशा के लिए jsfiddle में होगी।
अवकाजरविले

आप सही कह रहे हैं, @avcajaraville लेकिन मैंने पूर्ण कोड स्निपेट को शामिल नहीं किया क्योंकि रिचर्ड का मूल उत्तर एक ही विषय पर है, और मेरा सिर्फ साधारण संशोधन है। इसके बजाय, मैंने उसका जवाब बताया।
गोंगडो गोंग

1

बहुत आसान

  var position = your break position;
    var breakLine = "&#13;&#10;";//in html 
    var output = [value.slice(0, position), breakLine, value.slice(position)].join('');
    return output;

मान मूल स्ट्रिंग का प्रतिनिधित्व करता है


1

कस्टम प्लेसहोल्डर के साथ इस समाधान को देखें।

  • आपको मल्टीलाइन प्लेसहोल्डर मिलता है जो सभी ब्राउज़रों में काम करता है (फ़ायरफ़ॉक्स सहित)
  • आप चाहते हैं कि प्लेसहोल्डर को कस्टमाइज़ करना पॉसिबल हो

फिडल पर डेमो

$(document).on('input', '#textArea', function () {
	
        if ($('#textArea').val()) {
            $('#placeholderDiv').hide();
        } else {
            $('#placeholderDiv').show();
        }   
});
#textAreaWrap {
    position: relative;
    background-color: white;
}

#textArea {
    position: relative;
    z-index: 1;
    width: 350px;
    height: 100px;
    min-height: 100px;
    padding: 6px 12px;
    resize: vertical;
    background-color: transparent;
    /* When set background-color: transparent - Firefox  displays
    unpleasant textarea border. Set border style to fix it.*/
    border: 1px solid #a5a5a5;
}

#placeholderDiv {
    position: absolute;
    top: 0;
    padding: 6px 13px;
    color: #a5a5a5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="textAreaWrap">
    
<textarea id="textArea"></textarea>

<!-- Check here. If textarea has content -
     set for this div attribute style="display: none;" -->
<div id="placeholderDiv">Multiline textarea<br>
                         placeholder<br>
                         <br>
                         that works in Firefox</div>
    
</div>


0

जब आप टेक्स्टरी पर ध्यान केंद्रित करते हैं तो मुझे प्लेसहोल्डर को छिपाना पसंद नहीं है। इसलिए मैंने एक कंस्ट्रक्टर फंक्शन बनाया जो Placeholderबिल्कुल बिल्ट-इन प्लेसहोल्डर की तरह दिखता है और गूगल क्रोम के अलावा अन्य ब्राउजर्स में भी काम करता है। यह बहुत सुविधाजनक है क्योंकि आप Placeholderफ़ंक्शन को जितनी बार चाहें उपयोग कर सकते हैं और इसे jQuery की भी आवश्यकता नहीं है।

संपादित करें:

यह अब विशेष मामलों को भी संभालता है, जैसे कि प्लेसहोल्डर को सही ढंग से सम्मिलित करना।

var textarea = document.getElementById("textarea");
new Placeholder(textarea, "Line 1\nLine 2\nLine 3");

function Placeholder(el, placeholder) {
    if (el.value == "" || el.value == placeholder) {
        el.style.color = "gray";
        el.value = placeholder;
        el._plc = true;
        el.className += " unselectable";
    }
    function keyPress(e) {
        window.setTimeout(function() {
            var replaced = reverseStr(el.value).replace(reverseStr(placeholder), "");
            
            if (el.value == "") {
                el.value = placeholder;
                el.style.color = "gray";
                cursorToStart(el);
                el._plc = true;
                el.className += " unselectable";
            } else if (el._plc && el.value.endsWith(placeholder) && replaced !== "") {
                el.value = reverseStr(replaced);
                el.style.color = "black";
                el._plc = false;
                el.readOnly = false;
                el.className = el.className.replace("unselectable", "");
            } else if (el._plc && el.readOnly) {
                var ch = String.fromCharCode(e.charCode);
                if (e.keyCode == 13) ch = "\n";     // ENTER
                else if (e.charCode == 0) return;   // non-character keys
                
                el.value = ch;
                el.style.color = "black";
                el._plc = false;
                el.readOnly = false;
                el.className = el.className.replace("unselectable", "");
            }
        }, 10);
    }
    el.addEventListener("keypress", keyPress, false);
    el.addEventListener("paste", keyPress, false);
    el.addEventListener("cut", keyPress, false);
    el.addEventListener("mousedown", function() {
        if (el._plc) el.readOnly = true;
    }, false);
    el.addEventListener("mouseup", function() {
        el.readOnly = false;
        if (el._plc) cursorToStart(el);
    }, false);
  
    function cursorToStart(input) {
        if (input.createTextRange) {
            var part = input.createTextRange();
            part.move("character", 0);
            part.select();
        } else if (input.setSelectionRange){
            input.setSelectionRange(0, 0);
        } input.focus();
    }
    function reverseStr(str) {
        if (!str) return "";
        return str.split("").reverse().join("");
    }
}
textarea {
    border: 1px solid gray;
    padding: 3px 6px;
    font-family: Arial;
    font-size: 13px;
    transition: .2s;
}
textarea:hover, textarea:focus {
    border-color: #2277cc;
}
textarea:focus {
    box-shadow: inset 0 0 5px #85B7E9;
}
*.unselectable {
    -webkit-user-select: none;
    -webkit-touch-callout: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    -o-user-select: none;
}
<textarea id="textarea"></textarea>


0

यदि आपके कार्यान्वयन की अनुमति देता है, तो प्लेसहोल्डर द्वारा दिखाए गए चयनकर्ता और सुपर लगाए गए पृष्ठभूमि का उपयोग करके इस समस्या से निपटा जा सकता है:

textarea:not(:placeholder-shown) {
  background: #fff;
}

div {
  top: 0;
  left: 14px;
  color: rgba(0,0,0,0.4);
  z-index: -1;
  position: absolute;
  line-height: 1.2;
  white-space: pre-wrap;
}

https://codepen.io/franciscoaquino/pen/YzyBPYK

चयनकर्ता समर्थन:

https://caniuse.com/#feat=css-placeholder-shown

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