2016-07-08 11 views
0

コンテンツ編集可能な<p>とタイプsubmitの入力があります。したがって、<p>の中に値がない場合は、デフォルトのテキスト(たとえば、「コメントを追加...」)を表示したいと思います。 contenteditableにフォーカスがある場合は、デフォルトのテキストを削除します。今度は、contenteditableにフォーカスがなく、ユーザーが何らかのテキストを入力した場合は、ユーザーが入力したテキストを残してください。ただし、contenteditableにフォーカスがない場合、値が設定されていないとデフォルトのテキストが表示されます。どのように私はCSSまたはJavaScript(jqueryなし)でこれを行うことができますか? :empty擬似クラスと擬似要素とおそらく値がない場合、pタグ内にデフォルトのテキストを表示

#add_comment { 
 
    width: 100%; 
 
    max-width: 720px; 
 
    margin: 1px auto; 
 
    background: white; 
 
} 
 

 
#divLeft { 
 
    vertical-align: top; 
 
    display:table-cell; 
 
    width: 100%; 
 
} 
 

 
#add_comment #comment { 
 
    display: block; 
 
    padding: 10px; 
 
    margin: 10px; 
 
    outline: 1px solid lightgrey; 
 
} 
 

 
#divRight { 
 
    display:table-cell; 
 
    width: 120px; 
 
    vertical-align: top; 
 
} 
 

 
#divRight #submit { 
 
    background: #2ec76e; 
 
    border: none; 
 
    color: white; 
 
    padding: 10px; 
 
    margin-top: 10px; 
 
    margin-right: 10px; 
 
    border-radius: 3px; 
 
    cursor: pointer; 
 
}
<div id="add_comment"> 
 
    <div id="divLeft"> 
 
    <p id="comment" contenteditable="true"></p> 
 
    </div> 
 
    <div id="divRight"> 
 
    <input type="submit" value="Comment" id="submit" /> 
 
    </div> 
 

 
</div>

+1

ような何かを行うことができます'input'の代わりに' p'要素を持っている特定の理由はありますか?後者の場合は、 'placeholder =" Add comment ... "を使って、あなたが探している機能を提供することができます。さらに、JS対応のブラウザを使わずに作業しながら、個々のスタイリングを可能にします。 – TheThirdMan

+0

@ TheThirdManコンテンツを追加すると、その高さが増えます。 – Karl

+0

ああ、私はその推論を見ることができます...しかし、スクリーンリーダーや自動ツールがあなたのページで何が起こっているのかを分析するのが難しくなるので、アクセシビリティを気にするもの。 – TheThirdMan

答えて

4

#add_comment { 
 
    width: 100%; 
 
    max-width: 720px; 
 
    margin: 1px auto; 
 
    background: white; 
 
} 
 
#divLeft { 
 
    vertical-align: top; 
 
    display: table-cell; 
 
    width: 100%; 
 
} 
 
#add_comment #comment { 
 
    display: block; 
 
    padding: 10px; 
 
    margin: 10px; 
 
    outline: 1px solid lightgrey; 
 
} 
 
#divRight { 
 
    display: table-cell; 
 
    width: 120px; 
 
    vertical-align: top; 
 
} 
 
#divRight #submit { 
 
    background: #2ec76e; 
 
    border: none; 
 
    color: white; 
 
    padding: 10px; 
 
    margin-top: 10px; 
 
    margin-right: 10px; 
 
    border-radius: 3px; 
 
    cursor: pointer; 
 
} 
 
p:empty:before { 
 
    content: 'Add Comment'; 
 
    color: grey 
 
} 
 
p:focus::before { 
 
    content: ''; 
 
}
<div id="add_comment"> 
 
    <div id="divLeft"> 
 
    <p id="comment" contenteditable="true"></p> 
 
    </div> 
 
    <div id="divRight"> 
 
    <input type="submit" value="Comment" id="submit" /> 
 
    </div> 
 
</div>

+0

うわー..それはクロスブラウザですか? – Karl

+0

かなり - https://developer.mozilla.org/en-US/docs/Web/CSS/:empty –

0

ただ、このようにpタグ内のコントロールを配置:

<p> <asp:Label ID="Label1" runat="server" Text=""></asp:Label></p>

たり、HTML inputタグを使用することができます。 jQueryを使って

+0

+0

私のところでは謝罪しています。それはシステムエラーだと思っています。私は2つのセンテンスの中央の上記の答えにその答えを含めますが、私が進むときは答えます。答えは残った。私はちょうど新しいメンバーです。謝罪 –

+0

あなたのために編集しました。 –

0

https://jsfiddle.net/moongod101/jcma31L8/

$(function(){ 

$dfText = 'How was your day hum?' 
$p = $('p'); 

$p.text($dfText); 

$('input').on('input',function(){ 
    $text = $(this).val(); 
    if($text == ''){ 
    $p.text($dfText) 
    }else{ 
    $p.text($text) 
    } 

}); 


}); 
0

あなたはあなたが試すことができ、この

jQueryの

var placeHolder = 'Add Comment'; 

$("#comment").text(placeHolder); 

$("#comment").bind("focusin blur", function() { 
    if ($(this).text() === placeHolder) { 
    $(this).text(''); 
    } else if($(this).text() === ''){ 
    $("#comment").text(placeHolder); 
    } 
}); 
0

p:empty:not(:focus)::before 
{ 
    content: attr(data-placeholder); 
} 

<p data-placeholder="Insert text here..." contenteditable></p> 
関連する問題