174 votes

Entrée des espaces réservés pour Internet Explorer

HTML5 introduit l' placeholder attribut input - éléments, qui permet l'affichage de la grisé par défaut du texte.

Malheureusement, Internet Explorer, y compris IE 9 ne prend pas en charge.

Il y a déjà des espace réservé simulateur de scripts. Ils travaillent généralement en mettant la valeur par défaut de texte dans le champ de saisie, de lui donner une couleur grise et l'enlever dès que vous vous concentrez le champ de saisie.

L'inconvénient de cette approche est que le texte de l'espace réservé est dans le champ de saisie. Donc:

  1. les scripts ne peuvent pas facilement vérifier si un champ de saisie est vide
  2. côté serveur de traitement doit vérifier la valeur par défaut, afin de ne pas insérer l'espace réservé dans la base de données.

Je voudrais avoir une solution, où le texte de l'espace réservé n'est pas dans l'entrée elle-même.

151voto

Kevin Hakanson Points 15498

En regardant le "Web Forms : espace réservé d'entrée" de HTML5 Croix-Navigateur Polyfills, l'un que j'ai vu était jQuery-html5-espace réservé.

J'ai essayé la démo avec IE9, et il semble qu'il enveloppe votre <input> avec une durée et des superpositions, une étiquette avec le texte de l'espace réservé.

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

Il y a aussi d'autres cales de là, mais je n'ai pas tous les regarder. L'un d'eux, Placeholders.js, annonce lui-même comme "Pas de dépendances (donc pas besoin d'inclure jQuery, contrairement à la plupart de l'espace réservé polyfill scripts)."

Edit: Pour ceux qui sont plus intéressés par les "comment" cela "ce que", Comment créer une avancée HTML5 espace réservé polyfill de marcher à travers le processus de création d'un plugin jQuery qui fait cela.

Voir aussi garder de l'espace réservé sur le focus dans IE10 pour des commentaires sur la façon dont l'espace réservé de texte disparaît sur focus avec IE10, qui diffère de Firefox et de Chrome. Vous ne savez pas si il existe une solution pour ce problème.

38voto

user161642 Points 1272

Le meilleur dans mon expérience est https://github.com/mathiasbynens/jquery-placeholder (recommandé par html5please.com ). http://afarkas.github.com/webshim/demos/index.html a également une bonne solution parmi sa bibliothèque beaucoup plus étendue de polyfills.

12voto

Jonathan Tonge Points 860

Avec jQuery mise en œuvre, vous pouvez FACILEMENT supprimer les valeurs par défaut lorsqu'il est temps de présenter. Ci-dessous est un exemple:

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

});

Je sais que vous êtes à la recherche d'un recouvrement, mais vous pourriez préférer la facilité de cette route (aujourd'hui, sachant ce que j'ai écrit ci-dessus). Si oui, alors j'ai écrit cela pour mes propres projets et il fonctionne vraiment sympa (nécessite jQuery) et ne prend que quelques minutes à mettre en œuvre pour l'ensemble de votre site. Il propose des gris de texte au premier abord, gris clair lorsque dans l'accent, et noir lors de la saisie. Il offre également le texte de l'espace réservé à chaque fois que le champ de saisie est vide.

D'abord configurer votre formulaire et inclure votre espace réservé attributs de la balise input.

<input placeholder="enter your email here">

Il suffit de copier ce code et de l'enregistrer comme placeholder.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 );

À utiliser sur une seule entrée

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

C'est de cette façon que je vous recommande de mettre en œuvre sur tous les champs de saisie sur votre site quand le navigateur ne supporte pas HTML5 espace réservé attributs:

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

6voto

Nick Points 2850

Après avoir essayé quelques suggestions et voir des problèmes dans IE, voici celui qui fonctionne:

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

Ce que j'ai aimé - vous venez d'inclure le fichier js. Pas besoin de l'initier ou quoi que ce soit.

2voto

bluantinoo Points 350

J'ai trouvé une solution assez simple en utilisant cette méthode:

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

c'est un bidouille jquery, et ça a marché parfaitement sur mes projets

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X