J'ai un petit problème, l'attribut placeholder
pour les zones de saisie n'est pas pris en charge dans IE 8-9.
Quelle est la meilleure façon de rendre ce support dans mon projet (ASP Net). J'utilise jQuery. Dois-je utiliser d'autres outils externes pour cela?
http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html une bonne solution?
Vous pouvez utiliser ce plugin jQuery: https://github.com/mathiasbynens/jquery-placeholder
Mais votre lien semble également être une bonne solution.
Vous pouvez utiliser n'importe lequel de ces polyfills:
Ces scripts ajouteront un support pour l'attribut placeholder
dans les navigateurs qui ne le supportent pas, et ils ne nécessitent pas jQuery!
le $. Browser.msie n'est plus sur la dernière version de JQuery ... vous devez utiliser le $. support
comme ci-dessous:
<script>
(function ($) {
$.support.placeholder = ('placeholder' in document.createElement('input'));
})(jQuery);
//fix for IE7 and IE8
$(function () {
if (!$.support.placeholder) {
$("[placeholder]").focus(function () {
if ($(this).val() == $(this).attr("placeholder")) $(this).val("");
}).blur(function () {
if ($(this).val() == "") $(this).val($(this).attr("placeholder"));
}).blur();
$("[placeholder]").parents("form").submit(function () {
$(this).find('[placeholder]').each(function() {
if ($(this).val() == $(this).attr("placeholder")) {
$(this).val("");
}
});
});
}
});
</script>
si vous utilisez jQuery vous pouvez faire comme ça. depuis ce site Placeholder with Jquery
$('[placeholder]').parents('form').submit(function() {
$(this).find('[placeholder]').each(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
})
});
ce sont les liens alternatifs
J'ai eu des problèmes de compatibilité avec plusieurs plugins que j'ai essayés, cela me semble être le moyen le plus simple de prendre en charge des espaces réservés sur les entrées de texte:
function placeholders(){
//On Focus
$(":text").focus(function(){
//Check to see if the user has modified the input, if not then remove the placeholder text
if($(this).val() == $(this).attr("placeholder")){
$(this).val("");
}
});
//On Blur
$(":text").blur(function(){
//Check to see if the use has modified the input, if not then populate the placeholder back into the input
if( $(this).val() == ""){
$(this).val($(this).attr("placeholder"));
}
});
}
$(function(){
if($.browser.msie && $.browser.version <= 9){
$("[placeholder]").focus(function(){
if($(this).val()==$(this).attr("placeholder")) $(this).val("");
}).blur(function(){
if($(this).val()=="") $(this).val($(this).attr("placeholder"));
}).blur();
$("[placeholder]").parents("form").submit(function() {
$(this).find('[placeholder]').each(function() {
if ($(this).val() == $(this).attr("placeholder")) {
$(this).val("");
}
})
});
}
});
essaye ça
J'utilise thisone, c'est seulement du Javascript.
J'ai simplement un élément d'entrée avec une valeur et lorsque l'utilisateur clique sur l'élément d'entrée, il le change en élément d'entrée sans valeur.
Vous pouvez facilement changer la couleur du texte en utilisant CSS. La couleur de l'espace réservé est la couleur de l'ID #IEinput et la couleur de votre texte saisi est celle de l'id #email. Ne pas utiliser getElementsByClassName, car les versions de IE qui ne prennent pas en charge les espaces réservés, ne prennent pas en charge getElementsByClassName!
Vous pouvez utiliser un espace réservé lors de la saisie d'un mot de passe en définissant le type de saisie du mot de passe d'origine en texte.
Tinker: http://tinker.io/4f7c5/1 - Les serveurs JSfiddle sont hors service!
*Désolé pour mon mauvais anglais
JAVASCRIPT
function removeValue() {
document.getElementById('mailcontainer')
.innerHTML = "<input id=\"email\" type=\"text\" name=\"mail\">";
document.getElementById('email').focus(); }
HTML
<span id="mailcontainer">
<input id="IEinput" onfocus="removeValue()" type="text" name="mail" value="mail">
</span>
Pour les autres atterrissant ici. C'est ce qui a fonctionné pour moi:
//jquery polyfill for showing place holders in IE9
$('[placeholder]').focus(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
input.removeClass('placeholder');
}
}).blur(function() {
var input = $(this);
if (input.val() == '' || input.val() == input.attr('placeholder')) {
input.addClass('placeholder');
input.val(input.attr('placeholder'));
}
}).blur();
$('[placeholder]').parents('form').submit(function() {
$(this).find('[placeholder]').each(function() {
var input = $(this);
if (input.val() == input.attr('placeholder')) {
input.val('');
}
})
});
Ajoutez simplement ceci dans votre fichier script.js. Avec l'aimable autorisation de http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html
<input type="text" name="Name" value="Name" onfocus="this.value = ''" onblur=" if(this.value = '') { value = 'Name'}" />
Voici une fonction javascript qui créera des espaces réservés pour IE 8 et les versions antérieures, ainsi que pour les mots de passe:
/* 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>
Ajoutez le code ci-dessous et ce sera fait.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script src="https://code.google.com/p/jquery-placeholder-js/source/browse/trunk/jquery.placeholder.1.3.min.js?r=6"></script>
<script type="text/javascript">
// Mock client code for testing purpose
$(function(){
// Client should be able to add another change event to the textfield
$("input[name='input1']").blur(function(){ alert("Custom event triggered."); });
// Client should be able to set the field's styles, without affecting place holder
$("textarea[name='input4']").css("color", "red");
// Initialize placeholder
$.Placeholder.init();
// or try initialize with parameter
//$.Placeholder.init({ color : 'rgb(255, 255, 0)' });
// call this before form submit if you are submitting by JS
//$.Placeholder.cleanBeforeSubmit();
});
</script>
Téléchargez le code complet et la démonstration à partir de https://code.google.com/p/jquery-placeholder-js/downloads/detail?name=jquery.placeholder.1.3.Zip
J'ai utilisé le code de ce lien http://dipaksblogonline.blogspot.com/2012/02/html5-placeholder-in-ie7-and-ie8-fixed.html
Mais dans la détection du navigateur, j'ai utilisé:
if (navigator.userAgent.indexOf('MSIE') > -1) {
//Your placeholder support code here...
}
Comme la plupart des solutions utilisent jQuery ou ne sont pas aussi satisfaisantes que je l’aurais souhaité, j’ai écrit un extrait pour mootools.
function fix_placeholder(container){
if(container == null) container = document.body;
if(!('placeholder' in document.createElement('input'))){
var inputs = container.getElements('input');
Array.each(inputs, function(input){
var type = input.get('type');
if(type == 'text' || type == 'password'){
var placeholder = input.get('placeholder');
input.set('value', placeholder);
input.addClass('__placeholder');
if(!input.hasEvent('focus', placeholder_focus)){
input.addEvent('focus', placeholder_focus);
}
if(!input.hasEvent('blur', placeholder_blur)){
input.addEvent('blur', placeholder_blur);
}
}
});
}
}
function placeholder_focus(){
var input = $(this);
if(input.get('class').contains('__placeholder') || input.get('value') == ''){
input.removeClass('__placeholder');
input.set('value', '');
}
}
function placeholder_blur(){
var input = $(this);
if(input.get('value') == ''){
input.addClass('__placeholder');
input.set('value', input.get('placeholder'));
}
}
J'avoue que ça a l'air un peu plus que les autres, mais ça marche bien. __ espace réservé est une classe ccs qui rend la couleur du texte fictif fantaisie.
J'ai utilisé le fix_placeholder dans window.addEvent ('domready', ... et pour tout code ajouté comme les popups.
J'espère que vous aimez.
Sincères amitiés.