15

tldr: プレースホルダー属性のネイティブサポートがないにもかかわらず、(inputElemnt の「プレースホルダー」) が IE8 で true と等しいのはなぜですか? (要素の属性) は、ネイティブ サポートを確認する良い方法ではありませんか? Javascript ライブラリ Modernizer が使用します。

長いです: Defaultvalue ( http://unwrongest.com/projects/defaultvalue/ )という小さな Jquery プラグインがあります。Placeholder ( https://github.com/janjarfalk/jquery.placeholder.js )と呼ばれる小さな Jquery プラグインがあります。これは基本的に、HTML5 プレースホルダー属性のフォールバックです。

最近の更新で、これらの 3 行のコードを追加しました。ブラウザーがプレースホルダー属性をネイティブにサポートしている場合、Defaultvalue が実行されないことを期待します。

if('placeholder' in this){
    // これは入力要素です
    false を返します。
}

IE8 と IE7 を除くほとんどのブラウザで動作するようです。何らかの理由で、これでキー「プレースホルダー」が見つかりますが、IE7/IE8 ではプレースホルダー属性がサポートされていないと思います。

私のコードは、Javascript ライブラリ Modernizer ( http://www.modernizr.com/ )のこのコードに触発されました。

(関数(小道具) {
    for (var i = 0, len = props.length; i < len; i++) {
        attrs[ props[i] ] = !!(inputElem の props[i]);
    }
    属性を返します。
})('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));

私は何が欠けていますか?

4

2 に答える 2

14

新しい生の入力要素を作成すると、問題が解決しました。

var nativePlaceholderSupport = (関数() {
    var i = document.createElement('input');
    i.placeholder を返します !== 未定義;
})();

if(nativePlaceholderSupport){
    false を返します。
}
var nativePlaceholderSupport = (関数(){
    var i = document.createElement('input');
    return (i の「プレースホルダー」);
})();

if(nativePlaceholderSupport){
    false を返します。
}

RobG に感謝します。

于 2011-04-04T10:19:23.147 に答える
1

そうではありません。IE9 と IE8 の両方で false に等しくなります。

ライブデモ: http://jsfiddle.net/JVSgx/

于 2011-04-04T12:08:29.820 に答える