Internet Explorer için yer tutucuları girin


175

HTML5 placeholder,input öğeye gri renkte varsayılan bir metin görüntülenmesine izin veren .

Ne yazık ki IE 9 da dahil olmak üzere Internet Explorer desteklemiyor.

Zaten orada bazı yer tutucu simülatör komut dosyaları var. Genellikle varsayılan metni giriş alanına yerleştirerek çalışır, gri bir renk verir ve giriş alanına odaklanır vurmaz tekrar kaldırırlar.

Bu yaklaşımın dezavantajı, yer tutucu metnin giriş alanında olmasıdır. Böylece:

  1. komut dosyaları bir giriş alanının boş olup olmadığını kolayca kontrol edemez
  2. sunucu tarafı işlemenin, yer tutucuyu veritabanına eklememek için varsayılan değere göre kontrol etmesi gerekir.

Yer tutucu metnin girdinin kendisinde olmadığı bir çözüm istiyorum.

Yanıtlar:


151

HTML5 Çapraz Tarayıcı Çoklu Dosyalarının "Web Formları: girdi yer tutucu" bölümüne baktığımda gördüğüm bir tanesi jQuery-html5-yer tutucusuydu .

IE9 ile demo denedim ve <input>bir yayılma ile sarar ve yer tutucu metin ile bir etiket bindirme gibi görünüyor .

<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>

Orada başka şimler de var, ama hepsine bakmadım. Bunlardan biri, Placeholders.js kendisini "Bağımlılık yok (çoğu yer tutucu çoklu dolgu komut dosyalarının aksine jQuery'yi eklemenize gerek yok)" olarak tanıtır.

Düzenleme: Bu "nasıl" ne "daha fazla ilgilenenler için, bunu yapan bir jQuery eklentisi oluşturma sürecinde yürüyen gelişmiş bir HTML5 yer tutucu çoklu dolgu nasıl oluşturulur .

Ayrıca, Firefox ve Chrome'dan farklı olan IE10 ile yer tutucu metnin odakta nasıl kaybolduğuna ilişkin yorumlar için yer tutucuyu IE10'da odakta tutma konusuna bakın . Bu soruna bir çözüm olup olmadığından emin değilim.


2
IE7, IE8 ve IE9'da benim için iyi çalıştı.
Mark Rummel

2
Bu eklenti artık korunmuyor ve birçok bilinen sorunu var.
Ian Dunn

13
Downvote? Cevapta diğer şimlerle bağlantı vardı. JQuery olmayanı içerecek şekilde güncellendi.
Kevin Hakanson

Eklentinin github sayfası artık mevcut değil. İşte bir tane daha .

1
Girişin değiştirilmesine neden olan bir fandan çok büyük değil, aşağıdaki Nick'in cevabına bakmanızı tavsiye ederim. girdinin değerini değiştirmek yerine şeffaf bir kaplama kullanır
Nathan Tregillus

38

Deneyimlerime göre en iyisi https://github.com/mathiasbynens/jquery-placeholder ( html5please.com tarafından önerilir ). http://afarkas.github.com/webshim/demos/index.html ayrıca çok daha geniş çoklu dolgular kütüphanesi arasında iyi bir çözüme sahiptir.


3
JQuery-html5-yer tutucu üzerinden + 1'leyin. Bu çok daha hoş görünüyor ve diğeri tarafından kaçırılan bazı kenar davalarını ele alıyor (örneğin gizli alanlar)
andygeers

2
Bu sefer StackOverflow kötü bir tavsiye verdi söylemek gerekir. IE'de tıklattığınızda jQuery Placeholder girdiyi temizlemez.
firedev

12

Bir jQuery uygulaması ile, gönderme zamanı geldiğinde KOLAYCA varsayılan değerleri kaldırabilirsiniz. Aşağıda bir örnek verilmiştir:

$('#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

});

Bir yer paylaşımı aradığınızı biliyorum, ancak bu rotanın kolaylığını tercih edebilirsiniz (şimdi yukarıda ne yazdığımı biliyorsunuz). Eğer öyleyse, bunu kendi projelerim için yazdım ve gerçekten güzel çalışıyor (jQuery gerektirir) ve tüm sitenize uygulamak için sadece birkaç dakika sürer. İlk başta gri metin, odakta açık gri ve yazarken siyah sunar. Ayrıca, giriş alanı boş olduğunda yer tutucu metni de sunar.

Önce formunuzu ayarlayın ve giriş etiketlerine yer tutucu özelliklerinizi ekleyin.

<input placeholder="enter your email here">

Bu kodu kopyalayın ve placeholder.js olarak kaydedin.

(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 );

Sadece bir girişte kullanmak için

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

Tarayıcı HTML5 yer tutucu özelliklerini desteklemediğinde sitenizdeki tüm giriş alanlarına uygulamanızı şu şekilde öneririm:

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();
      });
  });
} 

Lütfen yukarıdakiler için bir keman / demo oluşturabilir misiniz, bana ve gelecekteki izleyiciye de yardımcı olacaktır.
user2086641

Şifre alanını destekliyor mu?
user2681579

6

Bazı önerileri denedikten ve IE'de sorunları gördükten sonra burada çalışan öneridir:

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

Ne sevdim - sadece js dosyasını dahil. Başlatmaya veya başka bir şeye gerek yok.


Bu yer tutucu kullandıktan sonra yani iyi çalışıyor, ancak formunda herhangi bir hata ise, form hatası görüntülenirken yer tutucu metin giriş alanından yanlış hizalanır, çözmeye çalıştım ama yapamadım. .
user2681579

Bunu değer değiştiren sürümlerden daha iyi seviyorum. Keşke yer tutucular html5 sürümü de bu şekilde çalıştı! (örneğin, odaktaki değeri kaybetmek yerine yer tutucuyu bir metin girilene kadar bırakmak)
Nathan Tregillus

4
  • Yalnızca IE9 + için çalışır

Aşağıdaki çözüm, yer tutucu özniteliğine sahip giriş metin öğelerine bağlanır. Yalnızca IE için bir yer tutucu davranışı öykünür ve değiştirilmezse gönderideki değer alanını temizler.

Bu komut dosyasını ekleyin, IE HTML5 yer tutucularını destekliyor gibi görünüyor.

  $(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
Birçok kullanıcı hala IE8 kullanıyor ve bazıları IE7 kullanıyor. Bu yüzden onları desteklemiyorsa bunun için gitmem
rzr

4

Size basit bir işlev öneriyorum:

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

    element.blur();
}

Ve kullanmak için, bu şekilde arayın:

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


2

Kullanabilirsiniz :

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);

2

Bunun gibi basit:

$(function() {
    ...

    var element = $("#selecter")
    if(element.val() === element.attr("placeholder"){

        element.text("").select().blur();
    }

    ...
});


1

Özel bir renge izin veren ve odaklandıklarında girişleri temizlemek için farklı bir davranış kullanan basit bir yer tutucu JQuery betiği ile geldim. Firefox ve Chrome'daki varsayılan yer tutucunun yerini alır ve IE8 için destek ekler.

// 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');
            }
        });
    });
});

mükemmel bir tuzlama, ancak bir hata var (this) .attr ('ipucu', $ (this) .attr ('yer tutucu')); // buffer bu satırı $ (this) .attr ('tooltip', $ (this) .attr ('placeholder')) olarak değiştirir; // buffer
angel.bonev

0

Placeholdr , yazdığım süper hafif bir yer tutucu jQuery çoklu dolgusu. Küçültülmüş 1 KB'den küçük.

Bu kütüphanenin her iki endişenizi de ele aldığından emin oldum:

  1. Placeholdr , Placeholdr'un bir sonucu olarak girdi alanlarında metin bulunduğunda beklenmeyen dönüş değerlerini önlemek için jQuery $ .fn.val () işlevini genişletir . Dolayısıyla, alanlarınızın değerlerine erişmek için jQuery API'sine bağlı kalırsanız, bir şeyi değiştirmeniz gerekmez.

  2. Placeholdr form gönderimlerini dinler ve sunucunun boş bir değer görmesi için yer tutucu metnini alanlardan kaldırır.

Yine, Placeholdr ile hedefim, yer tutucu sorununa basit bir bırakma çözümü sağlamaktır. Placeholdr desteğiyle ilgilenmek istediğiniz başka bir şey varsa Github'da bana bildirin.


0

Eklentiyi eklemek ve ie'nin mükemmel şekilde çalıştığını kontrol etmek içinjquery.placeholder.js

    <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

İşte IE 8 ve altı için yer tutucular yaratacak ve parolalar için de çalışan saf bir javascript işlevi (jquery gerekmez). HTML5 yer tutucu özniteliğini okur ve form öğesinin arkasında bir span öğesi oluşturur ve form öğesinin arka planını saydam yapar:

/* 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

NOT: Bu çoklu dolgunun yazarı "hayal edebileceğiniz hemen hemen her tarayıcıda çalışır" iddia ediyor, ancak IE11 için doğru olmayan yorumlara göre, ancak çoğu modern tarayıcıda olduğu gibi IE11'in yerel desteği var

Placeholders.js gördüğüm en iyi yer tutucu çoklu dolgu, hafif, JQuery'ye bağlı değil, diğer eski tarayıcıları (sadece IE değil) kapsar ve girişte gizleme ve bir kez çalıştırılan yer tutucuları için seçenekler sunar.


1
@Niclas IE9 ve üstü yer tutucular için kendi yerel desteğine sahiptir.
Hexodus

Bu yanıta, yer tutucular için caniuse bağlantısı içeren bir not ekledim.
Dave Everitt

-1

i kullanmak jquery.placeholderlabels . Bu dayanıyor bu ve demoed edilebilir burada .

ie7, ie8, ie9'da çalışır.

davranış, geçerli firefox ve krom davranışını taklit eder - burada "yer tutucu" metni odakta görünür kalır ve yalnızca alana bir şey yazıldıktan sonra kaybolur.


-1

Mevcut şimlerin yer tutucuyu odakta gizleyeceği için sinir bozucu olduktan sonra kendi jQuery eklentimi oluşturdum, bu da daha düşük bir kullanıcı deneyimi yaratıyor ve aynı zamanda Firefox, Chrome ve Safari'nin nasıl işlediğiyle eşleşmiyor. Bu, özellikle bir sayfa veya açılır pencere ilk yüklendiğinde bir girişin odaklanılmasını ve metin girilene kadar yer tutucuyu göstermeye devam etmesini istediğiniz durumdur.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.