cssまたはjqueryを使用してフォーカス時にプレースホルダーテキストを自動的に非表示にするにはどうすればよいですか?


213

これは、Chromeを除くすべてのブラウザで自動的に行われます

特にChromeをターゲットにする必要があると思います。

解決策はありますか?

でない場合、CSS、その後でjQueryの

敬具。


私の編集をcehckすると、それが役立つかもしれません
Toni Michel Caubet

Operaは、フォーカスのプレースホルダーを削除する別のブラウザーでもあります。
Lucas、

バージョン15以降のFirefoxでは、入力を開始するまでプレースホルダーテキストが削除されなくなりました。IE10の場合も同じだと思いますが、それを確認する方法がありません。
Rob Fletcher

1
ネイティブブラウザーの動作を変更する必要がないという事実について誰も言及しなかったことを心配しています。私はプレースホルダーが存在し続けることを好む。これはエンドユーザーとしての私を助けるだけであり、ブラウザーが実装し始めている機能です...おそらくフォーカスが消える動作がユーザビリティの問題であることが判明したためです。ブラウザーにしてください。
Ryan Wheale 2013年

「これはChromeを除くすべてのブラウザで自動的に行われます。」もう違います?私は、Firefox 37.0.2、Safari 7.1.5、およびChrome 42.0のOSXでこれを試したところです。入力を開始するまで、プレースホルダーテキストは削除されず、フィールドをクリアすると、すべてのテキストが元に戻ります。
ネイサンロング、

回答:


261
<input 
type="text" 
placeholder="enter your text" 
onfocus="this.placeholder = ''"
onblur="this.placeholder = 'enter your text'" />

2
これでうまくいきますが、フィールドをクリックすると、空白のままになります。
LondonGuy

2
@LondonGuy:投稿を編集しただけで、期待どおりに機能するかどうか確認してください。しかし、Toni Michel Caubetソリューションの方が優れています
MatuDuke、2012年

9
ここでの問題は、これが邪魔なJavaScriptです。Toni Michel Caubetのソリューションの方が優れています。
Silkster 2013

私はそれが好きですが、残念ながらIEもSafariも機能しません。
Mohammed Moustafa 2015年


455

編集:すべてのブラウザがサポートするようになりました

input:focus::placeholder {
  color: transparent;
}
<input type="text" placeholder="Type something here!">

Firefox 15とIE 10+もこれをサポートしています。Casey ChuのCSS ソリューションを拡張するには:

input:focus::-webkit-input-placeholder { color:transparent; }
input:focus:-moz-placeholder { color:transparent; } /* FF 4-18 */
input:focus::-moz-placeholder { color:transparent; } /* FF 19+ */
input:focus:-ms-input-placeholder { color:transparent; } /* IE 10+ */

1
正解です。HTML5を支持して古いjQueryソリューションを放棄し、すぐに修正としてJavaScriptを追加することにはあまり意味がありません。これは私が探していた解決策です。
ニーン2013年

@MartinHunt FFでこれを試しましたか?input:focus ::-moz-placeholder
Philip

16
古いスレッドを一掃することをお詫びしますが、これをより完全にするために:input:focus:-moz-placeholderはFirefox 18以下の場合、19以降の場合は次のように使用する必要があります:input:focus ::-moz-placeholder(注二重コロン)。参考:css-tricks.com/snippets/css/style-placeholder-text
ピーター・ルイス

このコメントは勝利です。剣道のような動的コントロールでも動作します
reflog

1
私からも大正解!フィールドが無効になっているときにこの機能も必要とする可能性のある人のために、CSSコードを次に示します。/ *保持フィールドが無効になっているときに、プレースホルダテキスト(ある場合)を非表示にする* / input:disabled ::-webkit-input-プレースホルダー{color:transparent; } input:disabled:-moz-placeholder {color:transparent; } input:disabled ::-moz-placeholder {color:transparent; } input:disabled:-ms-input-placeholder {color:transparent; }
Ramanagom 2017

74

以下はCSSのみのソリューションです(現時点では、WebKitでのみ機能します):

input:focus::-webkit-input-placeholder {
    opacity: 0;
}

1
私はこの答えが好きですが、これに対するブラウザのサポートはまだありません。
ジェリー、

44

純粋なCSSソリューション(JSは不要)

@Hexodusと@Casey Chuの回答に基づいて、CSSの不透明度と遷移を利用してプレースホルダーテキストをフェードアウトする更新されたクロスブラウザーソリューションを次に示します。それには、プレースホルダを使用することができます任意の要素のために働くtextareainputタグ。

::-webkit-input-placeholder { opacity: 1; -webkit-transition: opacity .5s; transition: opacity .5s; }  /* Chrome <=56, Safari < 10 */
:-moz-placeholder { opacity: 1; -moz-transition: opacity .5s; transition: opacity .5s; } /* FF 4-18 */
::-moz-placeholder { opacity: 1; -moz-transition: opacity .5s; transition: opacity .5s; } /* FF 19-51 */
:-ms-input-placeholder { opacity: 1; -ms-transition: opacity .5s; transition: opacity .5s; } /* IE 10+ */
::placeholder { opacity: 1; transition: opacity .5s; } /* Modern Browsers */

*:focus::-webkit-input-placeholder { opacity: 0; } /* Chrome <=56, Safari < 10 */
*:focus:-moz-placeholder { opacity: 0; } /* FF 4-18 */
*:focus::-moz-placeholder { opacity: 0; } /* FF 19-50 */
*:focus:-ms-input-placeholder { opacity: 0; } /* IE 10+ */
*:focus::placeholder { opacity: 0; } /* Modern Browsers */

編集:最新のブラウザーをサポートするように更新されました。


6
最高のCSSソリューション!
Fatih SARI 2016年

古き良きCSS ...素晴らしいシンプルなソリューション!なぜ私はそれを考えなかったのですか?
JI-Web、

40

プレースホルダー属性を試しましたか?

<input id ="myID" type="text" placeholder="enter your text " />

-編集-

わかりました、これを試してください:

$(function () {

    $('#myId').data('holder', $('#myId').attr('placeholder'));

    $('#myId').focusin(function () {
        $(this).attr('placeholder', '');
    });
    $('#myId').focusout(function () {
        $(this).attr('placeholder', $(this).data('holder'));
    });


});

テスト: http //jsfiddle.net/mPLFf/4/

-編集-

実際には、プレースホルダーは入力の名前ではなく値を記述するために使用する必要があるためです。次の代替案をお勧めします

html:

<label class="overlabel"> 
    <span>First Name</span>
    <input name="first_name" type="text" />
</label>

javascript:

$('.overlabel').each(function () {
    var $this = $(this);
    var field = $this.find('[type=text], [type=file], [type=email], [type=password], textarea');
    var span = $(this).find('> span');
    var onBlur = function () {
        if ($.trim(field.val()) == '') {
            field.val('');
            span.fadeIn(100);
        } else {
            span.fadeTo(100, 0);
        }
    };
    field.focus(function () {
        span.fadeOut(100);
    }).blur(onBlur);
    onBlur();
});

css:

.overlabel {
  border: 0.1em solid;
  color: #aaa;
  position: relative;
  display: inline-block;
  vertical-align: middle;
  min-height: 2.2em;
}
.overlabel span {
  position: absolute;
  left: 0;
  top: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.overlabel span, .overlabel input {
  text-align: left;
  font-size: 1em;
  line-height: 2em;
  padding: 0 0.5em;
  margin: 0;
  background: transparent;
  -webkit-appearance: none; /* prevent ios styling */
  border-width: 0;
  width: 100%;
  outline: 0;
}

テスト:

http://jsfiddle.net/kwynwrcf/


使用されているdata属性を確認してください。しかし、私はCSSと同等のものを見ます。キャッシュすると、より高速なソリューションになり、グローバルにすることができます。上記では、必要なすべての要素にデータ属性を配置する必要があります。(以下の回答)
Neil

1
これは複雑すぎます。はるかに少ないコードで実行できます。
JGallardo 2017年

@JGallardoが私に光を示します(ただし、3つの異なるソリューションがあることを確認したかどうかはわかりません)
Toni Michel Caubet

19

@ casey-chuと海賊ロブの答えを補強するために、ブラウザ間の互換性のある方法を次に示します。

    /* WebKit browsers */
input:focus::-webkit-input-placeholder { color:transparent; }

    /* Mozilla Firefox 4 to 18 */
input:focus:-moz-placeholder { color:transparent; }

    /* Mozilla Firefox 19+ */
input:focus::-moz-placeholder { color:transparent; }

    /* Internet Explorer 10+ */
input:focus:-ms-input-placeholder { color:transparent; }

正確に私が今書いたもの(代わりに私が使ったopacity:0;)!このスレッドで唯一可能なすべてのブラウザーをサポートするCSSソリューション!
ReynekeVosz 2015

11

Toniの答えは良いですが、私はむしろドロップしIDて明示的に使用したいので、inputすべての入力がplaceholder動作します:

<input type="text" placeholder="your text" />

これ$(function(){ });はの省略形です$(document).ready(function(){ });

$(function(){
    $('input').data('holder',$('input').attr('placeholder'));
    $('input').focusin(function(){
        $(this).attr('placeholder','');
    });
    $('input').focusout(function(){
        $(this).attr('placeholder',$(this).data('holder'));
    });
})

デモ。


3
複数のフィールドがある場合、これは機能しません。これは、コードjsfiddle.net/6CzRq/64の
svlada

10

これを名前空間にパッケージ化し、「placeholder」属性を持つ要素で実行したい...

$("[placeholder]").togglePlaceholder();

$.fn.togglePlaceholder = function() {
    return this.each(function() {
        $(this)
        .data("holder", $(this).attr("placeholder"))
        .focusin(function(){
            $(this).attr('placeholder','');
        })
        .focusout(function(){
            $(this).attr('placeholder',$(this).data('holder'));
        });
    });
};

5

私たちが使用してきた当社では、素晴らしい答えをありがとう@Rob Fletcherに、あなたのスタイルが最強の要素で適用されていることを確認するために、SPECIFICITYが必要な場合があります。id

そのため、アプリコンテナーのIDで始まるスタイルを追加することを検討してください

    #app input:focus::-webkit-input-placeholder, #app  textarea:focus::-webkit-input-placeholder {
        color: #FFFFFF;
    }

    #app input:focus:-moz-placeholder, #app textarea:focus:-moz-placeholder {
        color: #FFFFFF;
    }


5

純粋なCSSでそれは私のために働いた。入力時に入力/フォーカス時に透明にする

 input:focus::-webkit-input-placeholder { /* Chrome/Opera/Safari */
    color: transparent !important;
 }
 input:focus::-moz-placeholder { /* Firefox 19+ */
   color: transparent !important;
 }
 input:focus:-ms-input-placeholder { /* IE 10+ */
   color: transparent !important;
 }
 input:focus:-moz-placeholder { /* Firefox 18- */
   color: transparent !important;
  }

4

WallaceSidhréeのコードサンプルをさらに洗練するには:

$(function()
{  
      $('input').focusin(function()
      {
        input = $(this);
        input.data('place-holder-text', input.attr('placeholder'))
        input.attr('placeholder', '');
      });

      $('input').focusout(function()
      {
          input = $(this);
          input.attr('placeholder', input.data('place-holder-text'));
      });
})

これにより、各入力が正しいプレースホルダーテキストをデータ属性に確実に格納します。

jsFiddleの実際の例を参照しください。


4

トランジションを取り入れたCSSアプローチが好きです。フォーカスでは、プレースホルダーはフェードアウトします;)textareasでも機能します。

素晴らしいアイデアをありがとう@Casey Chu。

textarea::-webkit-input-placeholder, input::-webkit-input-placeholder { 
    color: #fff;
    opacity: 0.4;
    transition: opacity 0.5s;
    -webkit-transition: opacity 0.5s; 
}

textarea:focus::-webkit-input-placeholder, input:focus::-webkit-input-placeholder  { 
    opacity: 0;
}

4

SCSSをhttp://bourbon.io/とともに使用すると、このソリューションはシンプルでエレガントで、すべてのWebブラウザーで機能します。

input:focus {
  @include placeholder() {
    color: transparent;
  }
}

バーボンを使用してください!よかったですね !


3

このCSSは私にとってはうまくいきました:

input:focus::-webkit-input-placeholder {
        color:transparent;

}

1
それはJQueryなしでそれを行う良い方法です:)
tehX


2

HTML:

<input type="text" name="name" placeholder="enter your text" id="myInput" />

jQuery:

$('#myInput').focus(function(){
  $(this).attr('placeholder','');
});
$('#myInput').focusout(function(){
  $(this).attr('placeholder','enter your text');
});

1
これは、1つの入力のみを想定しています。
nym 2015年

2

2018> JQUERY v.3.3解決策: すべての入力に対してグローバルに機能し、プレースホルダー付きのテキストエリア。

 $(function(){
     $('input, textarea').on('focus', function(){
        if($(this).attr('placeholder')){
           window.oldph = $(this).attr('placeholder');
            $(this).attr('placeholder', ' ');
        };
     });

     $('input, textarea').on('blur', function(){
       if($(this).attr('placeholder')){
            $(this).attr('placeholder', window.oldph);
         };
     }); 
});

1

デモはこちら:jsfiddle

これを試して :

//auto-hide-placeholder-text-upon-focus
if(!$.browser.webkit){
$("input").each(
        function(){
            $(this).data('holder',$(this).attr('placeholder'));
            $(this).focusin(function(){
                $(this).attr('placeholder','');
            });
            $(this).focusout(function(){
                $(this).attr('placeholder',$(this).data('holder'));
            });

        });

}

代わりに$( "input [placeholder]")を使用して、プレースホルダー属性を持つフィールドのみを選択します。
Silkster 2013

これは最良の答えであり、シンプルで、焦点が外れている場合は他の選択を解除します
JGallardo

1

入力用

input:focus::-webkit-input-placeholder { color:transparent; }
input:focus:-moz-placeholder { color:transparent; }

テキストエリア用

textarea:focus::-webkit-input-placeholder { color:transparent; }
textarea:focus:-moz-placeholder { color:transparent; }

1
$("input[placeholder]").focusin(function () {
    $(this).data('place-holder-text', $(this).attr('placeholder')).attr('placeholder', '');
})
.focusout(function () {
    $(this).attr('placeholder', $(this).data('place-holder-text'));
});

1
$("input[placeholder]").each(function () {
    $(this).attr("data-placeholder", this.placeholder);

    $(this).bind("focus", function () {
        this.placeholder = '';
    });
    $(this).bind("blur", function () {
        this.placeholder = $(this).attr("data-placeholder");
    });
});

0

上記のすべてに加えて、私は2つのアイデアを持っています。

palceholderを模倣する要素を追加できます。次に、JavaScriptコントロールを使用して、要素の表示と非表示を制御します。

しかし、それは非常に複雑で、もう1つはCSSの兄弟のセレクターを使用しています。

.placeholder { position: absolute; font-size: 14px; left: 40px; top: 11px; line-height: 1; pointer-events: none; }
.send-message input:focus + .placeholder { display: none; } 

23333、英語が苦手です。問題を解決してください。


コンテンツの品質を上げるのに役立つこのURLを確認してください。
Willie Cheng

0

この機能を試してください:

+フォーカスのあるPlaceHolderを非表示にし、ぼかしで戻す

+この関数は、プレースホルダーセレクターに依存します。最初に、プレースホルダー属性を持つ要素を選択し、フォーカスで関数をトリガーし、ぼかしで別の関数をトリガーします。

フォーカス時:プレースホルダー属性から値を取得する要素に属性「data-text」を追加してから、プレースホルダー属性の値を削除します。

on blur:プレースホルダー値を返し、それをdata-text属性から削除します

<input type="text" placeholder="Username" />
$('[placeholder]').focus(function() {
    $(this).attr('data-text', $(this).attr('placeholder'));
    $(this).attr('placeholder', '');
  }).blur(function() {
      $(this).attr('placeholder', $(this).attr('data-text'));
      $(this).attr('data-text', '');
  });
});

input要素を調べて、舞台裏で何が起こっているのかを調べれば、よく私を追跡できます


0

同じことを角度5で適用しました。

プレースホルダーを保存するための新しい文字列を作成しました

newPlaceholder:string;

次に、入力ボックスでフォーカスとブラー機能を使用しました(prime ng autocompleteを使用しています)。

上記のプレースホルダーはtypescriptから設定されています

私が使用している2つの関数-

/* Event fired on focus to textbox*/
Focus(data) {
    this.newPlaceholder = data.target.placeholder;
    this.placeholder = '';
}
/* Event fired on mouse out*/
Blur(data) {
    this.placeholder = this.newPlaceholder;
}

0

CSSやJQueryを使用する必要はありません。HTML入力タグから直接実行できます。

たとえば、下の電子メールボックスでは、プレースホルダーテキストは内側をクリックすると非表示になり、外側をクリックすると再び表示されます。

<input type="email" placeholder="Type your email here..." onfocus="this.placeholder=''" onblur="this.placeholder='Type your email here...'">

-1
/* Webkit */
[placeholder]:focus::-webkit-input-placeholder { opacity: 0; }
/* Firefox < 19 */
[placeholder]:focus:-moz-placeholder { opacity: 0; }
/* Firefox > 19 */
[placeholder]:focus::-moz-placeholder { opacity: 0; }
/* Internet Explorer 10 */
[placeholder]:focus:-ms-input-placeholder { opacity: 0; }

この答えは前の答えと同じです。追加または改善すべき点がある場合は、元の回答の編集を提案してください。
JonathanDavidArndt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.