इंटरनेट एक्सप्लोरर के लिए इनपुट प्लेसहोल्डर


175

एचटीएमएल 5 ने तत्वों placeholderपर विशेषता पेश की input, जो ग्रे-आउट डिफ़ॉल्ट पाठ प्रदर्शित करने की अनुमति देता है।

अफसोस की बात है कि IE 9 सहित इंटरनेट एक्सप्लोरर, इसका समर्थन नहीं करता है।

वहां पहले से ही कुछ प्लेसहोल्डर सिम्युलेटर स्क्रिप्ट हैं। वे आम तौर पर इनपुट फ़ील्ड में डिफ़ॉल्ट-टेक्स्ट डालकर काम करते हैं, इसे एक ग्रे रंग देते हैं और जैसे ही आप इनपुट फ़ील्ड पर ध्यान केंद्रित करते हैं, इसे हटा देते हैं।

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

  1. स्क्रिप्ट आसानी से जांच नहीं कर सकते हैं कि इनपुट फ़ील्ड खाली है या नहीं
  2. डेटाबेस में प्लेसहोल्डर को सम्मिलित नहीं करने के लिए सर्वर साइड प्रोसेसिंग को डिफ़ॉल्ट मान के खिलाफ जांच करनी चाहिए।

मैं एक समाधान करना चाहता हूं, जहां प्लेसहोल्डर पाठ इनपुट में ही नहीं है।

जवाबों:


151

HTML5 क्रॉस ब्राउज़र पॉलीफ़िल के "वेब फॉर्म्स: इनपुट प्लेसहोल्डर" सेक्शन को देखते हुए, मैंने जो देखा वह jQuery-html5-प्लेसहोल्डर था

मैंने IE9 के साथ डेमो की कोशिश की , और ऐसा लगता है कि यह आपके <input>स्पैन के साथ लपेटता है और प्लेसहोल्डर टेक्स्ट के साथ एक लेबल को ओवरलैप करता है।

<label>Text:
  <span style="position: relative;">
    <input id="placeholder1314588474481" name="text" maxLength="6" type="text" placeholder="Hi Mom">
    <label style="font: 0.75em/normal sans-serif; left: 5px; top: 3px; width: 147px; height: 15px; color: rgb(186, 186, 186); position: absolute; overflow-x: hidden; font-size-adjust: none; font-stretch: normal;" for="placeholder1314588474481">Hi Mom</label>
  </span>
</label>

वहाँ अन्य शिम भी हैं, लेकिन मैंने उन सभी को नहीं देखा। उनमें से एक, प्लेसहोल्डर.जेएस , खुद को "कोई निर्भरता नहीं बताता है (इसलिए अधिकांश प्लेसहोल्डर पॉलीफिल स्क्रिप्ट के विपरीत jQuery को शामिल करने की कोई आवश्यकता नहीं है")।

संपादित करें: "कैसे" में अधिक रुचि रखने वालों के लिए "क्या", कैसे एक उन्नत एचटीएमएल 5 प्लेसहोल्डर पॉलीफ़िल बनाने के लिए जो एक jQuery प्लगइन बनाने की प्रक्रिया के माध्यम से चलता है जो ऐसा करता है।

इसके अलावा, प्लेसहोल्डर को IE10 में फोकस पर रखें कि कैसे प्लेसहोल्डर टेक्स्ट IE10 के साथ फोकस पर गायब हो जाता है, जो फ़ायरफ़ॉक्स और क्रोम से अलग है। यकीन नहीं होता तो इस समस्या का कोई हल है।


2
IE7, IE8 और IE9 में मेरे लिए अच्छी तरह से काम किया।
मार्क रुमेल

2
उस प्लगइन को अब बनाए नहीं रखा गया है, और बहुत सारे ज्ञात मुद्दे हैं।
इयान डन

13
Downvote? उत्तर में अन्य शम्स का लिंक था। गैर- jQuery एक शामिल करने के लिए अद्यतन किया गया।
केविन हैकेसन

प्लगइन का github पेज अब मौजूद नहीं है। यहाँ एक और है

1
प्रशंसक का बहुत बड़ा नहीं है जो इनपुट को संशोधित करने का कारण बनता है, मैं नीचे निक के जवाब को देखने की सलाह देता हूं। यह इनपुट के मूल्य को संशोधित करने के बजाय एक पारदर्शी ओवरले का उपयोग करता है
नाथन ट्रेगिलस

38

मेरे अनुभव में सबसे अच्छा है https://github.com/mathiasbynens/jquery-placeholder ( html5plat.com द्वारा अनुशंसित )। http://afarkas.github.com/webshim/demos/index.html भी पॉलीफ़िल के अपने अधिक व्यापक पुस्तकालय के बीच एक अच्छा समाधान है।


3
इस jQuery-html5- प्लेसहोल्डर पर +1। यह एक बहुत अच्छा लग रहा है और कुछ
धारियों

2
कहने का मतलब है कि इस बार StackOverflow ने एक बुरी सलाह दी। जब आप IE में क्लिक करते हैं तो jQuery प्लेसहोल्डर इनपुट को साफ नहीं करता है।
5

12

एक jQuery कार्यान्वयन के साथ आप आसानी से डिफ़ॉल्ट मान हटा सकते हैं जब यह सबमिट करने का समय है। नीचे एक उदाहरण है:

$('#submit').click(function(){
   var text = this.attr('placeholder');
   var inputvalue = this.val();  // you need to collect this anyways
   if (text === inputvalue) inputvalue = "";

   // $.ajax(...  // do your ajax thing here

});

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

पहले अपना फ़ॉर्म सेट करें और इनपुट टैग पर अपने प्लेसहोल्डर विशेषताओं को शामिल करें।

<input placeholder="enter your email here">

बस इस कोड को कॉपी करें और इसे प्लेसहोल्डर के रूप में सहेजें। js

(function( $ ){

   $.fn.placeHolder = function() {  
      var input = this;
      var text = input.attr('placeholder');  // make sure you have your placeholder attributes completed for each input field
      if (text) input.val(text).css({ color:'grey' });
      input.focus(function(){  
         if (input.val() === text) input.css({ color:'lightGrey' }).selectRange(0,0).one('keydown', function(){     
            input.val("").css({ color:'black' });  
         });
      });
      input.blur(function(){ 
         if (input.val() == "" || input.val() === text) input.val(text).css({ color:'grey' }); 
      }); 
      input.keyup(function(){ 
        if (input.val() == "") input.val(text).css({ color:'lightGrey' }).selectRange(0,0).one('keydown', function(){
            input.val("").css({ color:'black' });
        });               
      });
      input.mouseup(function(){
        if (input.val() === text) input.selectRange(0,0); 
      });   
   };

   $.fn.selectRange = function(start, end) {
      return this.each(function() {
        if (this.setSelectionRange) { this.setSelectionRange(start, end);
        } else if (this.createTextRange) {
            var range = this.createTextRange();
            range.collapse(true); 
            range.moveEnd('character', end); 
            range.moveStart('character', start); 
            range.select(); 
        }
      });
   };

})( jQuery );

सिर्फ एक इनपुट पर उपयोग करने के लिए

$('#myinput').placeHolder();  // just one

जब मैं ब्राउज़र को HTML5 प्लेसहोल्डर विशेषताओं का समर्थन नहीं करता है, तो मैं आपको अपनी साइट के सभी इनपुट फ़ील्ड पर इसे लागू करने की सलाह देता हूं:

var placeholder = 'placeholder' in document.createElement('input');  
if (!placeholder) {      
  $.getScript("../js/placeholder.js", function() {   
      $(":input").each(function(){   // this will work for all input fields
        $(this).placeHolder();
      });
  });
} 

क्या आप उपरोक्त के लिए एक फिडेल / डेमो बना सकते हैं, इससे मुझे और भविष्य के दर्शकों को भी मदद मिलेगी।
user2086641

क्या यह पासवर्ड फ़ील्ड के लिए समर्थन करता है।
user2681579

6

कुछ सुझावों की कोशिश करने और IE में मुद्दों को देखने के बाद यहाँ एक है जो काम करता है:

https://github.com/parndt/jquery-html5-placeholder-shim/

मुझे क्या पसंद आया है - आप बस js फ़ाइल शामिल करें। इसे या कुछ भी आरंभ करने की आवश्यकता नहीं है।


इस प्लेसहोल्डर का उपयोग करने के बाद यानी में ठीक काम कर रहा है, लेकिन अगर फॉर्म में कोई त्रुटि है, तो फॉर्म त्रुटि को प्रदर्शित करते समय प्लेसहोल्डर टेक्स्ट इनपुट क्षेत्र से गलत हो जाता है, मैंने हल करने की कोशिश की, लेकिन ऐसा करने में सक्षम नहीं है। ।
user2681579

मुझे वास्तव में यह मूल्य संशोधित करने वाले संस्करणों की तुलना में बेहतर है। मैं जगह धारकों के html5 संस्करण के रूप में अच्छी तरह से काम करना चाहते हैं! (यानी फ़ोकस हो जाने तक प्लेसहोल्डर को छोड़ने के बजाय फ़ोकस पर वैल्यू खो देने के बजाय)
नाथन ट्रेगिलस

4
  • केवल IE9 + के लिए काम करता है

निम्नलिखित समाधान प्लेसहोल्डर विशेषता के साथ इनपुट पाठ तत्वों को बांधता है। यह सिर्फ IE के लिए एक प्लेसहोल्डर व्यवहार का अनुकरण करता है और इनपुट के मूल्य क्षेत्र को जमा पर साफ करता है यदि इसे नहीं बदला गया है।

इस स्क्रिप्ट को जोड़ें और IE HTML5 प्लेसहोल्डर्स का समर्थन करता प्रतीत होगा।

  $(function() {
  //Run this script only for IE
  if (navigator.appName === "Microsoft Internet Explorer") {
    $("input[type=text]").each(function() {
      var p;
     // Run this script only for input field with placeholder attribute
      if (p = $(this).attr('placeholder')) {
      // Input field's value attribute gets the placeholder value.
        $(this).val(p);
        $(this).css('color', 'gray');
        // On selecting the field, if value is the same as placeholder, it should become blank
        $(this).focus(function() {
          if (p === $(this).val()) {
            return $(this).val('');
          }
        });
         // On exiting field, if value is blank, it should be assigned the value of placeholder
        $(this).blur(function() {
          if ($(this).val() === '') {
            return $(this).val(p);
          }
        });
      }
    });
    $("input[type=password]").each(function() {
      var e_id, p;
      if (p = $(this).attr('placeholder')) {
        e_id = $(this).attr('id');
        // change input type so that the text is displayed
        document.getElementById(e_id).type = 'text';
        $(this).val(p);
        $(this).focus(function() {
          // change input type so that password is not displayed
          document.getElementById(e_id).type = 'password';
          if (p === $(this).val()) {
            return $(this).val('');
          }
        });
        $(this).blur(function() {
          if ($(this).val() === '') {
            document.getElementById(e_id).type = 'text';
            $(this).val(p);
          }
        });
      }
    });
    $('form').submit(function() {
      //Interrupt submission to blank out input fields with placeholder values
      $("input[type=text]").each(function() {
        if ($(this).val() === $(this).attr('placeholder')) {
          $(this).val('');
        }
      });
     $("input[type=password]").each(function() {
        if ($(this).val() === $(this).attr('placeholder')) {
           $(this).val('');
        }
      });
    });
  }
});

1
कई उपयोगकर्ता अभी भी IE8 का उपयोग करते हैं और कुछ भी IE7 का उपयोग करते हैं। इसलिए मैं इसके लिए नहीं जाता अगर यह उनका समर्थन नहीं करता
rzr

4

मैं आपको एक सरल कार्य सुझाता हूं:

function bindInOut(element,value)
{
    element.focus(function()
    {
        if(element.val() == value) element.val('');         
    }).
    blur(function()
    {
        if(element.val() == '') element.val(value);
    });

    element.blur();
}

और इसका उपयोग करने के लिए, इसे इस तरह से कॉल करें:

bindInOut($('#input'),'Here your value :)');

2

मुझे इस पद्धति का उपयोग करके एक बहुत ही सरल समाधान मिला:

http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html

यह एक jquery हैक है, और इसने मेरी परियोजनाओं पर पूरी तरह से काम किया है


यह सभी के लिए ओवरराइड करता है इसलिए यह IE, WebKit या ओपेरा के सभी ब्राउज़रों के लिए काम करेगा
pankajdoharey

2

आप उपयोग कर सकते हैं :

var placeholder = 'search  here';

$('#search').focus(function(){
    if ($.trim($(this).val()) ===  placeholder){
        this.value ='';
    }
}).blur(function(){
    if ($.trim($(this).val()) ===  ''){
        this.value = placeholder;
    }
}).val(placeholder);


1

मैंने इस समस्या को हल करने के लिए एक jquery प्लगइन लिखा है .. यह मुफ़्त है।

JQuery निर्देशिका:

http://plugins.jquery.com/project/kegles-jquery-placeholder

साइट: www.kegles.com.br/jquery-placeholder/


लगता है अच्छी तरह से काम करने के लिए और बहुत सरल है ... केवल दो upvotes क्यों?
येवगेनी सिम्किन

1

मैं एक साधारण प्लेसहोल्डर JQuery स्क्रिप्ट के साथ आया था जो एक कस्टम रंग की अनुमति देता है और फ़ोकस करने पर इनपुट को साफ़ करने के एक अलग व्यवहार का उपयोग करता है। यह फ़ायरफ़ॉक्स और क्रोम में डिफ़ॉल्ट प्लेसहोल्डर की जगह लेता है और IE8 के लिए समर्थन जोड़ता है।

// placeholder script IE8, Chrome, Firefox
// usage: <input type="text" placeholder="some str" />
$(function () { 
    var textColor = '#777777'; //custom color

    $('[placeholder]').each(function() {
        (this).attr('tooltip', $(this).attr('placeholder')); //buffer

        if ($(this).val() === '' || $(this).val() === $(this).attr('placeholder')) {
            $(this).css('color', textColor).css('font-style','italic');
            $(this).val($(this).attr('placeholder')); //IE8 compatibility
        }

        $(this).attr('placeholder',''); //disable default behavior

        $(this).on('focus', function() {
            if ($(this).val() === $(this).attr('tooltip')) {
                $(this).val('');
            }
        });

        $(this).on('keydown', function() {
            $(this).css('font-style','normal').css('color','#000');
        });

        $(this).on('blur', function() {
            if ($(this).val()  === '') {
                $(this).val($(this).attr('tooltip')).css('color', textColor).css('font-style','italic');
            }
        });
    });
});

सही सामर्थ्य, लेकिन आपके पास एक त्रुटि है (यह) .attr ('टूलटिप', $) (यह) .attr ('प्लेसहोल्डर')); // बफर इस लाइन को $ (यह) .attr ('टूलटिप', $) (यह) .attr ('प्लेसहोल्डर')) में बदलता है; // बफ़र
परी.bonev

0

प्लेसहोल्डर एक सुपर-लाइट ड्रॉप-इन प्लेसहोल्डर jQuery पॉलीफ़िल है जो मैंने लिखा था। यह 1 केबी से कम है।

मैंने यह सुनिश्चित किया कि यह पुस्तकालय आपकी दोनों चिंताओं को दूर करेगा:

  1. जब प्लेसहोल्डर के परिणामस्वरूप इनपुट फ़ील्ड में पाठ मौजूद होता है, तो अप्रत्याशित रिटर्न मानों को रोकने के लिए प्लेसहोल्डर jQuery $ .fn.val () फ़ंक्शन का विस्तार करता है । इसलिए यदि आप अपने क्षेत्रों के मूल्यों तक पहुँचने के लिए jQuery एपीआई के साथ चिपके रहते हैं, तो आपको एक चीज़ बदलने की आवश्यकता नहीं होगी।

  2. प्लेसहोल्डर फॉर्म सबमेट्स को सुनता है, और यह प्लेसहोल्डर टेक्स्ट को खेतों से हटा देता है ताकि सर्वर को केवल एक खाली मान दिखाई दे।

फिर से, प्लेसहोल्डर के साथ मेरा लक्ष्य प्लेसहोल्डर समस्या के लिए एक सरल ड्रॉप-इन समाधान प्रदान करना है। मुझे गितुब के बारे में बताएं अगर आपके पास प्लेसहोल्डर समर्थन करने में कोई दिलचस्पी है।


0

प्लगइन डालने और जाँच करने के लिए यानी पूरी तरह से काम किया है

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="jquery.placeholder.js"></script>
    <script>
        // To test the @id toggling on password inputs in browsers that don’t support changing an input’s @type dynamically (e.g. Firefox 3.6 or IE), uncomment this:
        // $.fn.hide = function() { return this; }
        // Then uncomment the last rule in the <style> element (in the <head>).
        $(function() {
            // Invoke the plugin
            $('input, textarea').placeholder({customClass:'my-placeholder'});
            // That’s it, really.
            // Now display a message if the browser supports placeholder natively
            var html;
            if ($.fn.placeholder.input && $.fn.placeholder.textarea) {
                html = '<strong>Your current browser natively supports <code>placeholder</code> for <code>input</code> and <code>textarea</code> elements.</strong> The plugin won’t run in this case, since it’s not needed. If you want to test the plugin, use an older browser ;)';
            } else if ($.fn.placeholder.input) {
                html = '<strong>Your current browser natively supports <code>placeholder</code> for <code>input</code> elements, but not for <code>textarea</code> elements.</strong> The plugin will only do its thang on the <code>textarea</code>s.';
            }
            if (html) {
                $('<p class="note">' + html + '</p>').insertAfter('form');
            }
        });
    </script>

0

यहां एक शुद्ध जावास्क्रिप्ट फ़ंक्शन (आवश्यक कोई jquery नहीं है) जो IE 8 और उससे नीचे के लिए प्लेसहोल्डर बनाएगा और यह पासवर्ड के लिए भी काम करता है। यह HTML5 प्लेसहोल्डर विशेषता को पढ़ता है और फॉर्म एलिमेंट के पीछे एक स्पैन एलिमेंट बनाता है और फॉर्म एलिमेंट बैकग्राउंड को पारदर्शी बनाता है:

/* Function to add placeholders to form elements on IE 8 and below */
function add_placeholders(fm) {	
	for (var e = 0; e < document.fm.elements.length; e++) {
		if (fm.elements[e].placeholder != undefined &&
		document.createElement("input").placeholder == undefined) { // IE 8 and below					
			fm.elements[e].style.background = "transparent";
			var el = document.createElement("span");
			el.innerHTML = fm.elements[e].placeholder;
			el.style.position = "absolute";
			el.style.padding = "2px;";
			el.style.zIndex = "-1";
			el.style.color = "#999999";
			fm.elements[e].parentNode.insertBefore(el, fm.elements[e]);
			fm.elements[e].onfocus = function() {
					this.style.background = "yellow";	
			}
			fm.elements[e].onblur = function() {
				if (this.value == "") this.style.background = "transparent";
				else this.style.background = "white";	
			}		
		} 
	}
}

add_placeholders(document.getElementById('fm'))
<form id="fm">
  <input type="text" name="email" placeholder="Email">
  <input type="password" name="password" placeholder="Password">
  <textarea name="description" placeholder="Description"></textarea>
</form>


0

नोट: इस पॉलीफ़िल के लेखक का दावा है कि "यह आपके द्वारा कल्पना किए जा सकने वाले किसी भी ब्राउज़र में काम करता है" लेकिन टिप्पणियों के अनुसार IE11 के लिए सही नहीं है, हालांकि IE11 में मूल समर्थन है, जैसा कि अधिकांश आधुनिक ब्राउज़र करते हैं

प्लेसहोल्डर.जेएस मैंने देखा है सबसे अच्छा प्लेसहोल्डर पॉलीफ़िल है, हल्का है, JQuery पर निर्भर नहीं है, अन्य पुराने ब्राउज़रों (न केवल IE) को कवर करता है, और इसमें छिपाने के लिए इनपुट और रन-एक बार प्लेसहोल्डर्स के विकल्प हैं।


1
@ नीकल्स IE9 और इसके बाद के प्लेसहोल्डर्स के लिए इसका अपना मूल समर्थन है।
हेक्सोडस

मैंने प्लेसहोल्डर्स के लिए caniuse के लिंक के साथ इस उत्तर के लिए एक नोट जोड़ा है।
डेव एवरिट

-1

मैं jquery.placeholderlabels का उपयोग करता हूं । यह इस पर आधारित है और यहां प्रदर्शित किया जा सकता है

ie7, ie8, ie9 में काम करता है।

व्यवहार वर्तमान फ़ायरफ़ॉक्स और क्रोम व्यवहार की नकल करता है - जहां "प्लेसहोल्डर" टेक्स्ट फ़ोकस पर दिखाई देता है और फ़ील्ड में कुछ टाइप करने के बाद केवल गायब हो जाता है।


-1

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

https://github.com/nspady/jquery-placeholder-labels/

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