在文本区域输入键

Posted

技术标签:

【中文标题】在文本区域输入键【英文标题】:Enter key in textarea 【发布时间】:2011-01-07 03:57:59 【问题描述】:

我有一个textarea,在textarea 中按下的每个Enter 键上,我希望新行以一个项目符号开头,比如(*)。怎么办?

请不要使用 jQuery。

我可以观察 Enter 键,然后!?我是否必须获取 textarea 的全部值并将 * 附加到它并再次填充 textarea

【问题讨论】:

按照下面的提示,我找到了解决方案。 【参考方案1】:

你可以这样做:

<body>

<textarea id="txtArea" onkeypress="onTestChange();"></textarea>

<script>
function onTestChange() 
    var key = window.event.keyCode;

    // If the user has pressed enter
    if (key === 13) 
        document.getElementById("txtArea").value = document.getElementById("txtArea").value + "\n*";
        return false;
    
    else 
        return true;
    

</script>

</body>

虽然按回车的换行符仍然存在,但它是获得你想要的东西的开始。

【讨论】:

这仅适用于 IE:window.event 在其他浏览器中不支持。 Doug Crockford 让我告诉你使用 === 而不是 ==。 如果你写 onkeypress="return onTestChange();"那么原始的换行符将被忽略。 如果您按 Enter 并且该行之后已经存在一行或多行,则不是很有用。它将最终删除新行之后的所有行。 要在现代浏览器中使用,请将onkeypress="onTestChange();" 替换为onkeypress="onTestChange(event);",将function onTestChange() 替换为function onTestChange(e) ,并将var key = window.event.keyCode; 替换为var key = e.keyCode【参考方案2】:

只需将此 tad 添加到您的文本区域。

onkeydown="if(event.keyCode == 13) return false;"

【讨论】:

也许你可以扩展这个答案。它似乎不起作用。【参考方案3】:

您需要考虑用户在文本中间按下回车的情况,而不仅仅是在结尾处。我建议按照建议在keyup 事件中检测回车键,并使用正则表达式确保该值符合您的要求:

<textarea id="t" rows="4" cols="80"></textarea>
<script type="text/javascript">
    function formatTextArea(textArea) 
        textArea.value = textArea.value.replace(/(^|\r\n|\n)([^*]|$)/g, "$1*$2");
    

    window.onload = function() 
        var textArea = document.getElementById("t");
        textArea.onkeyup = function(evt) 
            evt = evt || window.event;

            if (evt.keyCode == 13) 
                formatTextArea(this);
            
        ;
    ;
</script>

【讨论】:

evt = evt || window.event; :这条线是干什么用的? @Fifi:这是旧版本的 Internet Explorer(我认为是 8 及以下)没有将事件作为参数传递给事件处理程序,而是使用全局 window.event。现在不需要了。【参考方案4】:

我的场景是当用户在输入 textarea 时按下回车键我必须包含一个换行符。我使用下面的代码实现了这一点......希望它可以帮助某人......

function CheckLength()

    var keyCode = event.keyCode
    if (keyCode == 13)
    
        document.getElementById('ctl00_ContentPlaceHolder1_id_txt_Suggestions').value = document.getElementById('ctl00_ContentPlaceHolder1_id_txt_Suggestions').value + "\n<br>";
    

【讨论】:

【参考方案5】:

你可以这样做:

$("#txtArea").on("keypress",function(e) 
    var key = e.keyCode;

    // If the user has pressed enter
    if (key == 13) 
        document.getElementById("txtArea").value =document.getElementById("txtArea").value + "\n";
        return false;
    
    else 
        return true;
    
);
&lt;textarea id="txtArea"&gt;&lt;/textarea&gt;

【讨论】:

他说没有 jQuery

以上是关于在文本区域输入键的主要内容,如果未能解决你的问题,请参考以下文章

不允许在 Flex 中编辑 textarea 中的特定区域

jquery:在 keyup 上执行此操作,除非该人在文本区域或输入中

如何使在文本区域中输入的文本对应于特定的单选按钮?

禁止在文本区域输入某些字符

如何使用javascript在文本区域中设置输入类型文本中的值? [复制]

手势在文本区域或输入中开始时的触摸动作行为