textarea jQuery上的默认文本?

Posted

技术标签:

【中文标题】textarea jQuery上的默认文本?【英文标题】:Default text on textarea jQuery? 【发布时间】:2011-01-23 01:44:52 【问题描述】:

我有一个文本区域,我想在页面加载时显示一些默认文本。单击 textarea 后,我希望文本消失,并且可能如果用户在 textarea 中单击并且没有输入任何内容,然后单击 textarea 之外的默认文本将再次显示。

我已经在 Google 和这里​​搜索过,但我似乎只能找到与文本框和 NOT 文本区域相关的教程,而且我已经在文本区域上使用了一个类,所以不能依赖于它的类上班。

有没有人愿意与我分享一些简单的 jQuery 代码来做我想做的上面的事情?

【问题讨论】:

当你说你“不能依赖类”时,这是否意味着你不能向文本区域添加任何类? 是的,因为我的 textarea 已经在使用一个类,所以不能向 textarea 添加另一个类。 您可以在给定的 html 元素上拥有任意数量的类。 当我这样做时,我得到一个验证错误:属性“类”的重复规范。我的类也设置了 textarea 的样式,并通过添加另一个类覆盖了设置 textarea 样式的类,因此我的 textarea 变成了没有样式的 textarea。 您没有多次指定class=。相反,您在属性内放置了一个以空格分隔的列表。例如,class="foo bar baz" 将具有三个类 foobarbaz 【参考方案1】:

演示: http://jsfiddle.net/marcuswhybrow/eJP9C/2/

记住用户键入默认值的极端情况很重要。我的解决方案通过使用 jQuery 的 data() 方法为每个 textarea 赋予 edited 标志来避免这种情况。

HTML

像往常一样定义textarea 的默认值:

<textarea>This is the default text</textarea>

jQuery

$('textarea').each(function() 
    // Stores the default value for each textarea within each textarea
    $.data(this, 'default', this.value);
).focus(function() 
    // If the user has NOT edited the text clear it when they gain focus
    if (!$.data(this, 'edited')) 
        this.value = "";
    
).change(function() 
    // Fires on blur if the content has been changed by the user
    $.data(this, 'edited', this.value != "");
).blur(function() 
    // Put the default text back in the textarea if its not been edited
    if (!$.data(this, 'edited')) 
        this.value = $.data(this, 'default');
    
);

演示: http://jsfiddle.net/marcuswhybrow/eJP9C/2/

【讨论】:

【参考方案2】:

足够简单:

$(function() 
  $('textarea.autoDefault').focus(function() 
     if($(this).val() === $(this).data('default') && !$(this).data('edited')) 
        $(this).val('');   
     
  ).change(function() 
     $(this).data('edited', this.value.length > 0);
  ).blur(function() 
     if($(this).val().length === 0) 
        $(this).val($(this).data('default'));
     
  ).blur(); //fire blur event initially
);

HTML 标记:

<textarea class="autoDefault" rows="10" cols="25" data-default="some default text"></textarea>

jsFiddle example

【讨论】:

嗨,因为我的 textareas 已经使用了一个类,所以我无法向 textareas 添加另一个类,而且它使用了一个 id。如何更改该代码使其不依赖于类或 id?感谢您的帮助和代码。 感谢会在早上进行测试,因为我已经崩溃了。谢谢雅各布:) 这里还有一个问题,当我点击提交按钮时,blur() 检测到没有变化,textarea 被设置为默认字符串。我认为当你提交时,你应该恢复空字符串。当然,服务器可以测试default 字符串。但这违背了edited 标志的使用...【参考方案3】:
"style='color:#888;' onfocus='inputFocus(this)' onblur='inputBlur(this)'"

^将其添加到您的 HTML 元素中

function inputFocus(i)
    if(i.value==i.defaultValue) i.value=""; i.style.color="#000"; 

function inputBlur(i)
    if(i.value=="") i.value=i.defaultValue; i.style.color="#888"; 

^将其添加到您的 document.ready 函数中

我不久前在 SO 上找到了该解决方案,但我还没有看到它做得更好

【讨论】:

它实际上是我见过的对新手最友好的代码【参考方案4】:

我已经在 Google 和此处搜索过,但是 我似乎只能找到教程 关于文本框

在文本框上使用的任何东西也可以在 jQuery 中的文本区域上使用。 val() 方法检测所使用的控件,并将 value 属性用于输入,将内部文本用于 textarea

选择其中任何一个链接并实施它

【讨论】:

【参考方案5】:

另一种方法是使用 HTML5 的占位符标记。

http://davidwalsh.name/html5-placeholder

这可能并非所有浏览器都支持,尤其是旧的 IE。

【讨论】:

以上是关于textarea jQuery上的默认文本?的主要内容,如果未能解决你的问题,请参考以下文章

jquery 获取textarea文本值详解

jquery 获取textarea文本值详解

用 jQuery 同步 CKEditor 和 TEXTAREA

HTML Textarea 默认文本? (如布局)[重复]

在 textbixes 和 textareas 中显示默认文本的最佳方法是啥

在 textbixes 和 textareas 中显示默认文本的最佳方法是啥