ユーザーがtextareaをクリックすると、textareaの内容をクリアしたい場合に、textareaで単純なフォームを使用しています。
これは可能ですか?
$('textarea#someTextarea').focus(function() {
$(this).val('');
});
デフォルトのテキスト(存在する場合)のみを削除する場合は、これを試してください:
$("textarea").focus(function() {
if( $(this).val() == "Default Text" ) {
$(this).val("");
}
});
デフォルトのテキストをテストすることにより、ユーザーがテキストエリアに戻った場合、ユーザーが入力したテキストは消去されません。
退出後にデフォルトのテキストを再挿入する場合(テキストを入力しない場合)、次のようにします。
$("textarea").blur(function() {
if( $(this).val() == "" ) {
$(this).val("Default Text");
}
});
もちろん、上記の例では、次のマークアップから始めることを前提としています。
<textarea>Default Text</textarea>
意味的にプレースホルダーテキストを使用する場合は、新しいHTML5プロパティを使用できます。
<textarea placeholder="Default Text"></textarea>
ただし、これは対応ブラウザでのみサポートされます。ただし、フォーム送信時にプレースホルダーテキストを送信しないという利点もあります。
私の提案は、最初のフォーカスで最初のデフォルトコンテンツのみを削除することです。その後のフォーカスでは、ユーザーコンテンツを削除するリスクがあります。これを実現するには、最初のクリック後のフォーカスハンドラーを単に。unbind()します:
_$("textarea").focus(function(event) {
// Erase text from inside textarea
$(this).text("");
// Disable text erase
$(this).unbind(event);
});
_
注として、開始タグと終了タグを持つtextarea
を使用しているため、$(this).text("");
または$(this).html("");
(...そして、内部のテキストtextarea
はその値でもあり、$(this).val("");
および$(this).attr("value", "");
または_this.value = "";
_。
HTML5は、この問題に対するより洗練されたソリューション、「プレースホルダー」属性を提供します。
Textareaが空の場合にのみ表示されるtextareaの背景にテキストを作成します。
<textarea placeholder="Enter some text !"></textarea>
現在の回答では部分的にしか対処されていない問題がいくつかあります。
これらの詳細を念頭に置いて、「プレースホルダー」という名前のクラスをフィールドに追加し、次のようなものを使用します。
$("form textarea.placeholder").focus(function(e) {
$(this).text("");
$(this).removeClass("placeholder");
$(this).unbind(e);
});
ユーザーがreally、reallyであることを保証するために、フォームの送信時に「プレースホルダー」クラス名が削除されたことを検証する愚かなプレースホルダーテキストを送信したい。
jQuery Validation Plugin を使用している場合、次のようにすべてをまとめることができます。
$.validator.addMethod("isCustom", function(value, element) {
return !$(element).hasClass("placeholder");
});
$(form).validate({
rules: {
message: {
required: true,
isCustom: true
}
},
messages: {
message: "Message required, fool!"
},
submitHandler: function(form) {
$(form).find(":submit").attr("disabled", "disabled");
form.submit();
}
});
jQuery(function($){
$("textarea").focus(function(){
$(this).val("");
});
});
このようなもの?
$('textarea#myTextarea').focus(function() {
if ($(this).val() == 'default text') {
$(this).val('');
}
});
これは可能であり、1つ以上のテキストエリアでこれを行うことができるコードを探していると思います...
これは私のサイトで使用するものです。
Javascript:
<script type='text/javascript'>
function RemoveText(NameEle)
{
if ($('#' + NameEle) == 'default')
{
$('#' + NameEle).val('');
$('#' + NameEle).text('');
$('#' + NameEle).html('');
}
}
function AddText(NameEle)
{
if ($('#' + NameEle) == '')
{
$('#' + NameEle).val('default');
$('#' + NameEle).text('default');
$('#' + NameEle).html('default');
}
}
</script>
HTML:
<textarea cols='50' rows='3' onfocus='RemoveText(this)' onblur='AddText(this)' name='name' id='id'>default</textarea>
<textarea type="text" onblur="if ($(this).attr('value') == '') {$(this).val('The Default Text');}" onfocus="if ($(this).attr('value') == 'The Default Text') {$(this).val('');}">The Default Text</textarea>
私はそれを簡単に見つけました
$('#myForm textarea').val('');
Chromeのフォームをクリアしますが、Firefox(6.x)では機能しませんでした。Firebugでは値は空でしたが、前のテキストはまだテキストエリアに表示されていました。 textareasを一度に1つずつ再構築します。
$('#' + formId + ' textarea').each(function(i){
textareaVal = $(this).parent().html();
$(this).parent().html(textareaVal);
});
これにより、Firefoxでジョブが終了し、Chromeが破損しません。フォーム内のすべてのテキストエリアを1つずつ通過します。他のすべてのブラウザー(Opera、Safari、IEでも)で動作します。