139 votes

Placeholder dans IE9

Il semble que c'est un problème connu, mais toutes les solutions que j'ai trouvé sur Google ne fonctionne pas sur mon nouvellement téléchargé IE9.

Quelle est votre façon préférée afin de permettre à l' Placeholder de la propriété sur l' input et textarea tags?

Facultatif: j'ai perdu beaucoup de temps et n'avait pas l'air de l' required bien encore. Souhaitez-vous également avez quelques conseils pour cela? Évidemment, je peux vérifier la valeur en PHP, mais pour aider l'utilisateur à cette propriété est très pratique.

184voto

Chris Jacob Points 4211

Placeholder HTML5 jQuery Plugin
- par Mathias Bynens (un collaborateur sur HTML5 Boilerplate et jsPerf)

https://github.com/mathiasbynens/jquery-placeholder

Démonstration Et Exemples

http://mathiasbynens.be/demo/placeholder

p.s
J'ai utilisé ce plugin de nombreuses fois et il fonctionne un régal. Il est également à ne pas soumettre le texte de l'espace réservé de la valeur que lorsque vous soumettez votre formulaire (... une vraie douleur je l'ai trouvé avec d'autres plugins).

21voto

matt Points 258

Je pense que c'est ce que vous recherchez: jquery-html5-placeholder-fix

Cette solution utilise la détection de fonctionnalités (via modernizr ) pour déterminer si l'espace réservé est pris en charge. Sinon, ajoute le support (via jQuery).

17voto

Mark Rhodes Points 3114

Si vous voulez le faire sans l'aide de jquery ou modenizer vous pouvez utiliser le code ci-dessous:

(function(){

     "use strict";

     //shim for String's trim function..
     function trim(string){
         return string.trim ? string.trim() : string.replace(/^\s+|\s+$/g, "");
     }

     //returns whether the given element has the given class name..
     function hasClassName(element, className){ 
         //refactoring of Prototype's function..
         var elClassName = element.className;
         if(!elClassName)
             return false;
         var regex = new RegExp("(^|\\s)" + className + "(\\s|$)");
         return regex.test(element.className);
     }

     function removeClassName(element, className){
         //refactoring of Prototype's function..
         var elClassName = element.className;
         if(!elClassName)
             return;
         element.className = elClassName.replace(
             new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ');
     }

     function addClassName(element, className){
         var elClassName = element.className;
         if(elClassName)
             element.className += " " + className;
         else
             element.className = className;
     }

     //strings to make event attachment x-browser.. 
     var addEvent = document.addEventListener ?
            'addEventListener' : 'attachEvent';
     var eventPrefix = document.addEventListener ? '' : 'on';

     //the class which is added when the placeholder is being used..
     var placeHolderClassName = 'usingPlaceHolder';

     //allows the given textField to use it's placeholder attribute
     //as if it's functionality is supported natively..
     window.placeHolder = function(textField){

         //don't do anything if you get it for free..
         if('placeholder' in document.createElement('input'))
             return;

         //don't do anything if the place holder attribute is not
         //defined or is blank..
         var placeHolder = textField.getAttribute('placeholder');        
         if(!placeHolder)
             return;

         //if it's just the empty string do nothing..
         placeHolder = trim(placeHolder);
         if(placeHolder === '')
             return;

         //called on blur - sets the value to the place holder if it's empty..
         var onBlur = function(){
             if(textField.value !== '') //a space is a valid input..
                 return;
             textField.value = placeHolder;
             addClassName(textField, placeHolderClassName);
         };

         //the blur event..
         textField[addEvent](eventPrefix + 'blur', onBlur, false);

         //the focus event - removes the place holder if required..
         textField[addEvent](eventPrefix + 'focus', function(){
             if(hasClassName(textField, placeHolderClassName)){
                removeClassName(textField, placeHolderClassName);
                textField.value = "";
             }
         }, false);

         //the submit event on the form to which it's associated - if the
         //placeholder is attached set the value to be empty..
         var form = textField.form;
         if(form){
             form[addEvent](eventPrefix + 'submit', function(){
                 if(hasClassName(textField, placeHolderClassName))
                     textField.value = '';
            }, false);
         }

         onBlur(); //call the onBlur to set it initially..
    };

}());

Pour chaque champ de texte que vous souhaitez utiliser pour vous devez exécuter placeHolder(HTMLInputElement), mais je suppose que vous pouvez simplement changer que pour satisfaire! Aussi, faisant de cette façon, plutôt que simplement sur la charge signifie que vous pouvez le faire fonctionner pour les entrées qui ne sont pas dans les DOM lorsque le chargement de la page.

Notez que cela fonctionne en appliquant la classe: usingPlaceHolder de l'élément d'entrée, de sorte que vous pouvez l'utiliser pour le style (par exemple, ajouter la règle .usingPlaceHolder { color: #999; font-style: italic; } pour le faire paraître mieux).

8voto

Voici une bien meilleure solution. http://bavotasan.com/2011/HTML5-PlaceHolder-jQuery-Fix/ J’ai été adopté un peu pour fonctionner uniquement avec les navigateurs sous IE10

5voto

Erdem KAYA Points 51

Si vous voulez entrer une description vous pouvez l’utiliser. Cela fonctionne sur IE 9 et tous les autres navigateurs.

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