HTML5 文本区域占位符未出现

问题描述 投票:0回答:8

我无法弄清楚我的标记有什么问题,但文本区域的占位符不会出现。看起来好像它可能被一些空格和制表符覆盖。当您将焦点放在文本区域并从光标所在位置删除,然后离开文本区域时,就会出现正确的占位符。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html>
    <head>
    </head>

    <body>

    <form action="message.php" method="post" id="message_form">
        <fieldset>

            <input type="email" name="email" id="email" title="Email address"
                maxlength="40"
                placeholder="Email Address" 
                autocomplete="off" required />
            <br />
            <input type="text" 
                name="subject" 
                id="subject" title="Subject"
                maxlength="60" placeholder="Subject" autocomplete="off" required />
            <br />
            <textarea name="message" 
                id="message" 
                title="Message" 
                cols="30" 
                rows="5" 
                maxlength="100" 
                placeholder="Message" required>
            </textarea>
            <br />
            <input type="submit" value="Send" id="submit"/>

        </fieldset>
    </form>
</body>

<script>

$(document).ready(function() {        
    $('#message_form').html5form({
        allBrowsers : true,
        responseDiv : '#response',
        messages: 'en',
        messages: 'es',
        method : 'GET',
        colorOn :'#d2d2d2',
        colorOff :'#000'
    }
);
});

</script>

</html>
jquery forms html textarea placeholder
8个回答
852
投票

这对我和其他许多人来说一直是一个难题。简而言之,

<textarea>
元素的开始和结束标签必须在同一行,否则换行符会占用它。因此,由于输入区域包含内容(从技术上讲,换行符是有效内容),因此不会显示占位符。

好:

<textarea></textarea>

坏:

<textarea>
</textarea>

更新(2020)

根据 HTML5 解析规范,这不再是 是真的

If the next token is a U+000A LINE FEED (LF) character token, 
then ignore that token and move on to the next one. (Newlines 
at the start of textarea elements are ignored as an authoring 
convenience.)

但是,如果您的编辑坚持以 CRLF 结束行,您可能仍然会遇到麻烦。


66
投票

删除

<textarea>
打开和关闭
</textarea>
标签之间的所有空格和换行符。

<textarea placeholder="YOUR TEXT"></textarea>  ///Correct one

<textarea placeholder="YOUR TEXT"> </textarea>  ///Bad one It's treats as a value so browser won't display the Placeholder value

<textarea placeholder="YOUR TEXT"> 
</textarea>  ///Bad one 

11
投票

因为某处有空间。我使用的是 jsfiddle,标签后面有一个空格。删除空间后,它开始工作


5
投票

好吧,从技术上讲,只要开始标记的结尾“">”和开头“<" from the closing tag. That is you need to end with

...></textarea>
”之间没有字符,就不必位于同一行,如下例所示:

<p><label>Comments:<br>
       <textarea id = "comments" rows = "4" cols = "36" 
            placeholder = "Enter comments here"
            class = "valid"></textarea>
    </label>
</p>

4
投票

我知道 Aquarelle 已经(很好)回答了这篇文章,但以防万一有人在使用其他没有文本(例如输入)的标签表单时遇到此问题,我会将其留在这里:

如果您的表单中有输入,并且由于开头有空格而未显示占位符,这可能是您的“值”属性造成的。如果您使用变量来填充输入值,请检查逗号和变量之间是否有空格。

使用 twig 进行 php 框架 symfony 的示例:

<input type="text" name="subject" value="{{ subject }}" placeholder="hello" />       <-- this is ok
<input type="text" name="subject" value" {{ subject }} " placeholder="hello" />      <-- this will not show placeholder 

在这种情况下,{{ }} 之间的标签是变量,只需确保逗号之间没有留下空格,因为空格也是有效字符。


3
投票

使用

<textarea></textarea>
而不是像
<textarea>
</textarea>

那样在开始和结束标签之间留出空格

0
投票

在我们的例子中,开始和结束标记之间的文本区域标记不应是 spacenewline 字符 或任何文本(值)。

如果有空格、换行符或任何文本,则将其视为覆盖占位符的值。

    **PlaceHolder Appears**
    <textarea placeholder="Am Default Message"></textarea>

    **PlaceHolder Doesn't Appear**

    <textarea placeholder="Am Default Message">  </textarea>
   <textarea placeholder="Am Default Message"> 
   </textarea>
   <textarea placeholder="Am Default Message">Something</textarea>

0
投票

我遇到了同样的问题,仅使用

.pug
文件(类似于
.jade
)。我意识到这也是一个 空格问题 ,在我的右括号末尾之后。在我的示例中,您需要突出显示
(placeholder="YOUR MESSAGE")
之后的文本才能看到:

之前:

form.form-horizontal(method='POST')
  .form-group
    textarea.form-control(placeholder="YOUR MESSAGE") 
  .form-group  
    button.btn.btn-primary(type='submit') SUBMIT

之后:

form.form-horizontal(method='POST')
  .form-group
    textarea.form-control(placeholder="YOUR MESSAGE")
  .form-group  
    button.btn.btn-primary(type='submit') SUBMIT
© www.soinside.com 2019 - 2024. All rights reserved.