你能在<textarea>中拥有多行HTML5占位符文本吗?

at.*_*at. 147 html forms html5 textarea placeholder

我在文本域中有鬼文本,当你使用HTML5的占位符属性关注它们时会消失:

<input type="text" name="email" placeholder="Enter email"/>
Run Code Online (Sandbox Code Playgroud)

我想使用相同的机制在textarea中包含多行占位符文本,可能是这样的:

<textarea name="story" placeholder="Enter story\n next line\n more"></textarea>
Run Code Online (Sandbox Code Playgroud)

但是那些\n出现在文本中并且不会引起换行...有没有办法让多行占位符?

更新:我使用它的唯一方法是使用 jQuery Watermark插件,该插件在占位符文本中接受HTML:

$('.textarea_class').watermark('Enter story<br/> * newline', {fallback: false});
Run Code Online (Sandbox Code Playgroud)

Ion*_*tan 81

规范不允许换行或回车字符.

占位符属性表示旨在帮助用户输入数据的简短提示(单词或短语).提示可以是样本值或预期格式的简要描述.如果指定,该属性必须具有不包含U + 000A LINE FEED(LF)或U + 000D CARRIAGE RETURN(CR)字符的值.

显然,建议使用<textarea>更长时间的属性.

对于更长的提示或其他咨询文本,title属性更合适.

编辑(1/8/18):

对于<textarea>这似乎并非如此.规范实际上概述了回车+换行符必须由浏览器呈现.

当元素的值为空字符串且控件未聚焦时(例如,通过将其显示在空白的未聚焦控件内),用户代理应将此提示呈现给用户.所有U + 000D CARRIAGE RETURN U + 000A LINE FEED字符对(CRLF)中的提示,以及所有其他U + 000D CARRIAGE RETURN(CR)和U + 000A LINE FEED(LF)字符的提示,必须予以处理渲染提示时的换行符.

请参阅文档:http://w3c.github.io/html/sec-forms.html#element-attrdef-textarea-placeholder
还反映在MDN上:https://developer.mozilla.org/en-US/docs/Web/HTML /元/ textarea的

FWIW,当我尝试使用Chrome 63.0.3239.132时,它确实可以正常工作.

  • 除了title属性的行为方式不同,即它不显示重影内容.事实上,占位符支持文本区域的多行非常合适,因为文本区域是多行生物.可惜规范不允许.我想黑客将不得不做.叹 (37认同)

Cyr*_*bil 67

大多数(请参阅下面的详细信息)浏览器中,在javascript中编辑占位符允许多行占位符.正如所说,它不符合规范,你不应该期望它在未来工作(编辑:它确实有效).

此示例替换所有 multiline textarea的占位符.

var textAreas = document.getElementsByTagName('textarea');

Array.prototype.forEach.call(textAreas, function(elem) {
    elem.placeholder = elem.placeholder.replace(/\\n/g, '\n');
});
Run Code Online (Sandbox Code Playgroud)
<textarea class="textAreaMultiline" 
          placeholder="Hello, \nThis is multiline example \n\nHave Fun"
          rows="5" cols="35"></textarea>
Run Code Online (Sandbox Code Playgroud)

JsFiddle片段.

预期结果

预期结果


基于评论,似乎某些浏览器接受此黑客攻击而其他浏览器则不接受.
这是我运行的测试的结果(使用browsertshotsbrowserstack)

  • Chrome:> = 35.0.1916.69
  • Firefox:> = 35.0(结果因平台而异)
  • IE:> = 10
  • 基于KHTML的浏览器:4.8
  • Safari:否(已测试= Safari 8.0.6 Mac OS X 10.8)
  • 歌剧:没有(测试<= 15.0.1147.72)

根据统计数据,这意味着它适用于当前(2015年10月)使用的浏览器的约88.7%.

更新:今天,它至少有94.4%的当前(2018年7月)使用的浏览器.

  • 有一个拼写错误,但我无法编辑,因为StackOverflow给我这个"编辑必须至少6个字符"错误.你的班级应该是`multiline`而不是`multiligne` (2认同)

Tho*_* II 59

我发现如果你使用大量空间,浏览器将正确包装它.不要担心使用确切数量的空格,只需在那里扔很多,浏览器应该正确地换行到下一行的第一个非空格字符.

<textarea name="address" placeholder="1313 Mockingbird Ln         Saginaw, MI 45100"></textarea>
Run Code Online (Sandbox Code Playgroud)

  • 在IE和Firefox Windows中,这对我不起作用.它只是插入我要求的空间 (7认同)
  • 是的多行占位符不支持crossbrowser,发现最新的safari确实支持但IOS5肯定不支持 (2认同)

Got*_*tox 23

实际上有一个hack可以在Webkit浏览器中添加多行占位符,Chrome曾经可以工作但是在最新版本中他们删除了它:


首先像往常一样将占位符的第一行添加到html5

<textarea id="text1" placeholder="Line 1" rows="10"></textarea>
Run Code Online (Sandbox Code Playgroud)

然后通过css添加其余行:

#text1::-webkit-input-placeholder::after {
    display:block;
    content:"Line 2\A Line 3";
}
Run Code Online (Sandbox Code Playgroud)

如果您想将线条放在一个地方,可以尝试以下方法.其缺点是除了chrome,safari,webkit等其他浏览器.甚至不显示第一行:

<textarea id="text2" placeholder="." rows="10"></textarea>?
Run Code Online (Sandbox Code Playgroud)

然后通过css添加其余行:

#text2::-webkit-input-placeholder{
    color:transparent;
}

#text2::-webkit-input-placeholder::before {
    color:#666;
    content:"Line 1\A Line 2\A Line 3\A";
}
Run Code Online (Sandbox Code Playgroud)

演示小提琴

这将是非常好的,如果是这样可以在Firefox上使用类似的演示.

  • 不再在 Chrome 中工作——我想已经很长一段时间了。 (2认同)

Lau*_*Mat 15

根据 MDN

在呈现提示时,占位符文本中的回车符或换行符必须被视为换行符。

这意味着如果你只是跳到一个新行,它应该被正确渲染。IE

<textarea placeholder="The car horn plays La Cucaracha.
You can choose your own color as long as it's black.
The GPS has the voice of Darth Vader.
"></textarea> 
Run Code Online (Sandbox Code Playgroud)

应该像这样呈现:

在此处输入图片说明


ros*_*oha 6

如果您使用的是AngularJS,则只需使用花括号将所需的内容放在其中:这是一个小提琴。

<textarea rows="6" cols="45" placeholder="{{'Address Line1\nAddress Line2\nCity State, Zip\nCountry'}}"></textarea>
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用类似的方法,但它在 Safari 和 Firefox 中不起作用 (3认同)

Uza*_*yat 6

这显然可以通过正常输入来完成,

<textarea name="" id="" placeholder="Hello awesome world. I will break line now

Yup! Line break seems to work."></textarea>
Run Code Online (Sandbox Code Playgroud)


小智 5

反应:

如果您使用的是 React,则可以按如下方式进行:

placeholder={'Address Line1\nAddress Line2\nCity State, Zip\nCountry'}
Run Code Online (Sandbox Code Playgroud)