如何将默认文本添加到 html 文本区域的开头?

Posted

技术标签:

【中文标题】如何将默认文本添加到 html 文本区域的开头?【英文标题】:How do I add a default text to the beginning of an html text area? 【发布时间】:2014-09-10 20:00:17 【问题描述】:

我正在建立一个个人的小型社交网络。作为设计的一部分,所有状态都应以不应更改的默认文本开头,类似于“嗨,我的名字是……”,然后用户完成其余的。有点像一个不会消失的 html5 占位符。实现这一目标的最佳方法是什么?

【问题讨论】:

为什么不这样做呢? 听起来毫无意义...只需将其添加到适用的 html 中 如果它没有改变,而且必须一直存在,你为什么要将它添加到用户输入中? javascript 容易受到操纵,本质上是不安全的,任何用户都可以访问。将此添加到表示层,用户无法(轻松)更改它并且您可以轻松更改它(如果您愿意的话),而无需经历整个您的数据库以删除/修改字符串。 表示层是什么意思? @Voltron - 这意味着将其添加到前端以仅在提交时静态前缀不是 textarea 值的一部分的方式进行显示 - 要求您稍后在服务器上删除/替换边。即就像我发布的答案一样。 【参考方案1】:

请参考fiddle 如果它达到目的,那么请在下面找到代码。

标记:

<textarea id='status'>
Hi, my name is...
</textarea>

JavaScript:

document.querySelector('#status').addEventListener('input', function(e)
    var defaultText = 'Hi, my name is...',
        defaultTextLength = defaultText.length;
    if(this.selectionStart === this.selectionEnd && this.selectionStart defaultTextLength 
        this.value = defaultText;
    
);

【讨论】:

有没有办法使文本不可擦除? 没有javascript。【参考方案2】:

如果目标是用户无法更改此文本,那么您可以做几件事:

    在文本区域之外添加文本(例如在其上方) 在 textarea 之外添加文本,但使用 css 将其放在 textarea 后面。您可以使 textarea 透明,以便用户可以看到文本。存在的问题是用户输入的文本可能会覆盖您放置在背景中的文本 放到textarea的背景图片中 将文本放置在文本区域 (&lt;textarea&gt;Hi, my name is &lt;/textarea&gt;) 中,并使用 JavaScript 测试已键入的内容,并在文本变为您不想要的内容时更改文本。您可以使用屏蔽插件来执行此操作。

最好的选择是第一个选项和第四个选项。我会先去,因为它是迄今为止最简单的

【讨论】:

【参考方案3】:

注意:出于某种愚蠢的原因,我假设使用 jQuery(请注意,您不需要 jQuery,但它会更容易一些)。

这是一种使用text-indent 和绝对定位&lt;span&gt; 组合的解决方案(用于前缀部分)。

演示:http://jsfiddle.net/4YzZy/


$('textarea.withprefix').each(function() 
  var prefix = $('<span/>')
              .text($(this).data('prefix'))
              .addClass('prefix')
              .appendTo('body')
              .css(
                  left: $(this).position().left + 'px',
                  top: $(this).position().top + 'px',
              );
  $(this).css(textIndent: prefix.outerWidth() + 'px');
);
textarea, span.prefix 
    font-family: arial; /* change these as needed, but ensure that the textarea and the span use the same font */
    font-size: 1em;
    font-weight: normal;
    padding: 2px;
    border-width: 1px;

span.prefix 
    position:absolute;   
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class="withprefix" data-prefix="Hi There, "></textarea>

【讨论】:

这很完美!我还没有包含 jquery,所以我必须添加它。【参考方案4】:

如果您想使用 javascript 来执行您的任务,您可以设置一些事件侦听器,然后当用户进行更改时,检查该更改是否影响了您要更改的文本。 Sarbbottam 的新代码会执行此操作,但如果您修改原始文本,它将替换您已经输入的任何文本。我已通过保存 textarea 的先前值来解决此问题。

HTML:

<textarea id="text">Hello, my name is </textarea>

Javascript:

var defaultText = "Hello, my name is ";
var valueOnKeyDown = new Array();
document.getElementById("text").addEventListener("keydown", function() 
    valueOnKeyDown.push(this.value);
, false);
document.getElementById("text").addEventListener("keyup", function(e) 
    if(valueOnKeyDown[0].substring(0, defaultText.length) != this.value.substring(0, defaultText.length)) 
        this.value = valueOnKeyDown[0];
    
    valueOnKeyDown = new Array();
, false);

当然还有工作的demo。

其他答案中未提及的另一个可能有效的选项是设置 keydown/keypress 事件侦听器并使用 javascript 获取文本区域中的插入符号位置。如果它小于默认文本的长度,则只需调用 event.preventDefault()。这样做的主要缺点是可能无法使其完全跨浏览器兼容。

【讨论】:

以上是关于如何将默认文本添加到 html 文本区域的开头?的主要内容,如果未能解决你的问题,请参考以下文章

如何在文本区域的当前插入符号位置插入文本

将文本区域的文本保存在数据库中

如何将HTML中下拉菜单和文本区域的值传递到java中的

将文本浮动到文本区域的右侧[关闭]

用于类似***的输入文本区域的JQuery?文本-​​>HTML

向 Django 添加文本区域的正确方法是啥?