ブラウザーでプレースホルダー属性をサポートするために何を使用していますか?
現在、使用しています:
https://github.com/mathiasbynens/Placeholder-jQuery-Plugin
このプラグインも役に立たないように試しました:
https://github.com/danbentley/placeholder
しかし、IEでは動作しないようです...より具体的にはIE 8.その他の提案/代替案はありますか?
とりあえず、placeholder属性を忘れてしまうべきでしょうか?
IE8がplaceholder
属性をサポートしていないのは当然です。 placeholder
はHTML5仕様の一部であり、IE5はHTML5が考えられるずっと前にリリースされました。
それをシームレスに処理する最良の方法は、 Modernizr のようなツールを使用して、ブラウザーがプレースホルダー機能をサポートしているかどうかを検出し、サポートされていない場合はJSポリフィルスクリプトを実行することです。
if(!Modernizr.input.placeholder) {
//insert placeholder polyfill script here.
}
ダウンロードできる多数のプレースホルダポリフィルスクリプトがあります。 placeholder
属性を使用するものを1つ選択すると、すべてのブラウザーで1つの場所にプレースホルダー文字列を定義するだけで済みます。これがあなたが試すことができるものです: http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html
お役に立てば幸いです。
chromeでネイティブに動作し、IE8でポリフィルを使用する私のプロジェクトからの直接のコードはここにあります...ポリフィルがいつ呼び出されているかを示すテストのための警告がここにあります。このコードを使用するための前提条件ですが、単純なスクリプトが<head>
セクションで行います。
<script type="text/javascript">
$('document').ready(function () {
if (!Modernizr.input.placeholder) {
$('[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('');
}
})
});
alert("no place holders");
}
});
</script>
私がこれまで見てきた他のすべての回答と例で、私はいくつかの問題を発見しました。これらの問題を解決するための独自のソリューションを作成し、ここに投稿することにしました。他のソリューションが問題を抱えているように見える私のコードが正しく処理する2つのことは次のとおりです。
次のように、ModernizrとJQueryを含めます。
<script type="text/javascript" src="jquery-1.9.1.js"></script>
<script type="text/javascript" src="modernizr-2.6.2.js"></script>
次のようなCSSを追加します。
<style type="text/css" media="all">
.placeholder {
color: #aaa;
}
</style>
次に、必要なメインコードは次のとおりです。
<script type="text/javascript">
$(document).ready(function() {
// Only do anything if the browser does not support placeholders
if (!Modernizr.input.placeholder) {
// Format all elements with the placeholder attribute and insert it as a value
$('[placeholder]').each(function() {
if ($(this).val() == '') {
$(this).val($(this).attr('placeholder'));
$(this).addClass('placeholder');
}
$(this).focus(function() {
if ($(this).val() == $(this).attr('placeholder') && $(this).hasClass('placeholder')) {
$(this).val('');
$(this).removeClass('placeholder');
}
}).blur(function() {
if($(this).val() == '') {
$(this).val($(this).attr('placeholder'));
$(this).addClass('placeholder');
}
});
});
// Clean up any placeholders if the form gets submitted
$('[placeholder]').parents('form').submit(function() {
$(this).find('[placeholder]').each(function() {
if ($(this).val() == $(this).attr('placeholder') && $(this).hasClass('placeholder')) {
$(this).val('');
}
});
});
// Clean up any placeholders if the page is refreshed
window.onbeforeunload = function() {
$('[placeholder]').each(function() {
if ($(this).val() == $(this).attr('placeholder') && $(this).hasClass('placeholder')) {
$(this).val('');
}
});
};
}
});
</script>
Placeholder属性には、かなりの数のポリフィルスクリプトがあります。これが うまくいくようです です。
JSコードで$('input, textarea').placeholder();
を呼び出し、CSSルールを追加することを忘れないでください。 .placeholder { color: #aaa }
。
実際、2011年10月19日現在、IEはプレースホルダー属性をサポートしていません。私はそれを7、8、9でテストしましたが、誰もそれを認識していないようです。 ie9は、css3とhtml5をどのようにサポートすることになっているのかを見て、これを修正したと思いますが、そうではありません。
きれいではありませんが、仕事が完了する簡単な回避策として、次のようなjavascriptを使用できます。
<input type="text" value="Enter Zip"
onfocus="if(this.value == 'Enter Zip'){this.value = '';}" />
これは私のプロジェクトで使用したものです。唯一のことは、1つの要素にプレースホルダーが必要なだけだったので、状況によってはすぐに機能しない可能性があります。しかし、コードがいかに単純であるかを理解するために:
(function(){
var nameInput = document.getElementById('your-id-here');
var placeHolderSupport = ("placeholder" in document.createElement("input"));
if( !placeHolderSupport )
{
//show hint in gray
var placeholder = nameInput.getAttribute('placeholder');
nameInput.onfocus = function(){ if(this.value==placeholder){this.value='';this.className='';} };
nameInput.onblur = function(){ if(this.value==''){this.value=placeholder;this.className='placeholder';} };
nameInput.onblur();
}
})()