web-dev-qa-db-ja.com

cssまたはjqueryを使用してフォームのあるプレスホルダーテキストを自動非表示にする方法

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

私は具体的にChromeをターゲットにしなければならないと思います。

解決策はありますか?

CSSと一緒でなければ、jQueryと一緒に?

191
LondonGuy
<input 
type="text" 
placeholder="enter your text" 
onfocus="this.placeholder = ''"
onblur="this.placeholder = 'enter your text'" />
227
MatuDuke

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+ */
399
Rob Fletcher

これはCSSのみのソリューションです(現時点では、WebKitでのみ動作します)。

input:focus::-webkit-input-placeholder {
    opacity: 0;
}
72
Casey Chu

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

<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/

40

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

@Hexodusと@Casey Chuの答えに基づいて、ここではCSSの不透明度とトランジションを活用してプレースホルダのテキストをフェードアウトさせる、更新されたクロスブラウザソリューションを紹介します。 textareaタグやinputタグなど、プレースホルダを使用できるすべての要素に対して機能します。

::-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 */

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

36
JamesWilson

@ casey-chuとpirate robの答えを補強するために、これはよりクロスブラウザ互換の方法です:

    /* 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; }
19
Adrian Föder

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'));
    });
})

デモ

11

これを名前空間にまとめて、「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'));
        });
    });
};
10
martinedwards

あなたのスタイルが最強の要素で適用されることを確実にするために特異性を必要とすることがあります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
Mahdi Alkhatib

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'));
      });
})

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

ここjsFiddleの 実用的な例を参照してください

4
truetone

http://bourbon.io/ と一緒にSCSSを使用すると、この解決策はシンプルで洗練され、すべてのWebブラウザで動作します。

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

Bourbonを使ってください。よかったですね !

4
Michael

私はcssアプローチがトランジションでスパイスをかけているのが好きです。焦点を合わせると、プレースホルダはフェードアウトします;)テキストエリアにも機能します。

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

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
Hexodus

純粋な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;
  }
3

純粋なCSSベースのソリューションの場合:

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

注意:すべてのブラウザベンダーによってまだサポートされていません。

参照: Ilia RaiskinによるCSS でフォーカスのあるプレースホルダテキストを隠します。

3
Toran Billups

このCSSは私にとって役に立ちました:

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

}
3
Alex Bondor

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);
         };
     }); 
});
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');
});
2
Uffo

入力用

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

textarea用

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

デモはこちら: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'));
            });

        });

}
1
Suresh Pattu
$("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");
    });
});
1
hadi
$("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
OsBen

上記以外にも、2つのアイデアがあります。

あなたはpalceholderを模倣する要素を追加することができます。次にJavaScriptを使用して要素の表示と非表示を制御します。

しかし、それはとても複雑です、他のものは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、英語が下手です。あなたの問題を解決したいと思います。

0
dufemeng

CSSやJQueryを使う必要はありません。 HTMLのinputタグから直接実行できます。

例えば、のように、下のメールボックスでは、内側をクリックするとプレースホルダのテキストが消え、外側をクリックするとテキストが再び表示されます。

<input type="email" placeholder="Type your email here..." onfocus="this.placeholder=''" onblur="this.placeholder='Type your email here...'">
0
Saiful Islam
/* 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; }
0
Maicon Perin

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

+ PlaceHolderをフォーカスの上に隠してぼかしに戻す

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

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

ぼかした場合:プレースホルダの値を返し、それを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', '');
  });
});

あなたが入力要素を調べることによってあなたが舞台裏で何が起こっているかを見るならば、あなたは私に非常によく従うことができます

0
Wael Assaf

私が角度5で適用したのと同じこと。

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

newPlaceholder:string;

それから私は入力ボックスでフォーカスとぼかし機能を使いました(私は素数自動補完を使っています)。

上記のプレースホルダは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
Rohit Grover