Входные заполнители для Internet Explorer
HTML5 представил атрибут placeholder
на элементах input
, что позволяет отображать серый цвет текста по умолчанию.
К сожалению, Internet Explorer, включая IE 9, не поддерживает его.
Там уже есть скрипты симулятора-заполнителя. Обычно они работают, помещая текст по умолчанию в поле ввода, придавая ему серый цвет и удаляя его снова, как только вы фокусируете поле ввода.
Недостатком этого подхода является то, что текст-заполнитель находится в поле ввода. Таким образом:
- скрипты не могут легко проверить, пустое поле ввода
- Обработка на стороне сервера должна проверяться на значение по умолчанию, чтобы не вставлять заполнитель в базу данных.
Я хотел бы иметь решение, где текст заполнителя не входит в сам ввод.
Ответы
Ответ 1
При просмотре раздела "Веб-формы: ввод-заполнитель" HTML5 Cross Browser Polyfills, я видел jQuery-html5-placeholder.
Я попробовал демонстрацию с 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>
Там есть и другие прокладки, но я не смотрел на них всех. Один из них, Placeholders.js, рекламирует себя как "Нет зависимостей (поэтому нет необходимости включать jQuery, в отличие от большинства сценариев placeholder polyfill),."
Изменить: Для тех, кто больше интересуется "как", что "что", Как создать расширенный заполнитель HTML5 polyfill, который проходит процесс создания плагина jQuery, который делает это.
Также см. держать местозаполнитель в фокусе в IE10 для комментариев о том, как текст заполнителя исчезает в фокусе с IE10, который отличается от Firefox и Chrome. Не уверен, есть ли решение этой проблемы.
Ответ 2
Лучший в моем опыте https://github.com/mathiasbynens/jquery-placeholder (рекомендуется html5please.com). http://afarkas.github.com/webshim/demos/index.html также имеет хорошее решение среди своей гораздо более обширной библиотеки полиполков.
Ответ 3
При реализации 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) и занимает всего пару минут для реализации всего вашего сайта. Сначала он содержит серый текст, светло-серый, когда он находится в фокусе, и черный при наборе текста. Он также предлагает текст заполнителя всякий раз, когда поле ввода пуст.
Сначала настройте свою форму и укажите атрибуты placeholder на входных тегах.
<input placeholder="enter your email here">
Просто скопируйте этот код и сохраните его как 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 );
Чтобы использовать только один вход
$('#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();
});
});
}
Ответ 4
После того, как некоторые советы и проблемы с проблемой в IE возникают, выполните следующие действия:
https://github.com/parndt/jquery-html5-placeholder-shim/
Что мне понравилось - вы просто включаете js файл. Нет необходимости инициировать его или что-то еще.
Ответ 5
- Работает только для IE9 +
Следующее решение связывается с входными текстовыми элементами с атрибутом placeholder. Он эмулирует поведение заполнителя только для IE и очищает поле входного значения для отправки, если он не изменен.
Добавьте это script, и 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 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('');
}
});
});
}
});
Ответ 6
Я предлагаю вам простую функцию:
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 :)');
Ответ 7
Я нашел довольно простое решение, используя этот метод:
http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html
это jquery hack, и он отлично работал над моими проектами
Ответ 8
Вы можете использовать:
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);
Ответ 9
Простой пример:
$(function() {
...
var element = $("#selecter")
if(element.val() === element.attr("placeholder"){
element.text("").select().blur();
}
...
});
Ответ 10
Я написал плагин jquery для решения этой проблемы.. это бесплатно..
Каталог JQuery:
http://plugins.jquery.com/project/kegles-jquery-placeholder
Сайт:
www.kegles.com.br/jquery-placeholder/
Ответ 11
Я придумал простой заполнитель JQuery script, который позволяет настраивать цвет и использует другое поведение входов очистки при фокусировке. Он заменяет местозаполнитель по умолчанию в Firefox и Chrome и добавляет поддержку 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');
}
});
});
});
Ответ 12
Placeholdr - супер-легкий заполнитель-заполнитель jQuery polyfill, который я написал. Это менее 1 КБ, уменьшенное.
Я удостоверился, что эта библиотека касается обеих ваших проблем:
-
Placeholdr расширяет функцию jQuery $.fn.val(), чтобы предотвратить непредвиденные возвращаемые значения, когда текст присутствует в полях ввода как в результате Placeholdr. Поэтому, если вы используете API jQuery для доступа к значениям ваших полей, вам не нужно ничего менять.
-
Placeholdr прослушивает отправку форм и удаляет текст заполнителя из полей, чтобы сервер просто видел пустое значение.
Опять же, моя цель с Placeholdr заключается в том, чтобы предоставить простое решение о замене проблемы с заполнителем. Дайте мне знать о Github, если вам что-то еще понадобится поддержка Placeholdr.
Ответ 13
ПРИМЕЧАНИЕ: автор этого polyfill утверждает, что он "работает практически в любом браузере, который вы можете себе представить", но в соответствии с комментариями, которые не соответствуют IE11, однако IE11 имеет встроенную поддержку, как и большинство современных браузеров
Placeholders.js - лучший заполнитель polyfill Я видел, легкий, не зависит от JQuery, охватывает другие более старые браузерами (а не только IE) и имеет опции для скрытых и промежуточных заполнителей.
Ответ 14
Вставить плагин и проверить, что т.е. отлично работает. jquery.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>
Ответ 15
Вот чистая функция javascript (без jquery), которая создаст местозаполнители для IE 8 и ниже, и она также будет работать и для паролей. Он считывает атрибут placeholder HTML5 и создает элемент span за элементом формы и делает прозрачный элемент элемента формы прозрачным:
/* 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>
Ответ 16
Я использую jquery.placeholderlabels. Он основан на этом и может быть демонтирован здесь.
работает в ie7, ie8, ie9.
поведение имитирует текущее поведение firefox и chrome - где текст "placeholder" остается видимым в фокусе и исчезает только после того, как что-то набирается в поле.
Ответ 17
Я создал свой собственный плагин jQuery после того, как разочаровался в том, что существующие прокладки скроют местозаполнитель в фокусе, что создает более низкий пользовательский интерфейс, а также не соответствует тому, как обрабатываются Firefox, Chrome и Safari. Это особенно важно, если вы хотите, чтобы ввод был сфокусирован, когда сначала загружается страница или всплывающее окно, при этом показывая местозаполнитель до ввода текста.
https://github.com/nspady/jquery-placeholder-labels/