我需要一个textarea,我在框中键入我的文本,它根据需要增长,以避免处理滚动条,它需要在删除文本后收缩!我不想沿着mootools或jquery路线走,因为我有一个轻量级的形式.
在IE 11中,自动换行不再适用于textarea元素.在IE 10及更早版本中,FF,Safari和Chrome自动换行按预期工作.
IE 11没有实现任何自动换行.我尝试在textarea标签中添加"wrap = hard",并添加"word-wrap:normal;" 到CSS.
还有其他人遇到过这个问题吗?如果是这样,你找到了解决方案.Windows正在推出此更新,并且不一致的行为正在成为一个问题.
感谢您的任何帮助,您可以提供.
这是我当前的textarea标签
<textarea class="wrklst-report_text" id="report_text_6586427" name="report_text[6586427]" title="Report Box" data-exam_seq="6586427" style="width:95%;"></textarea>
Run Code Online (Sandbox Code Playgroud)
这是我的计算CSS
-webkit-appearance: textarea;
-webkit-rtl-ordering: logical;
-webkit-user-select: text;
-webkit-writing-mode: horizontal-tb;
background-color: rgb(255, 255, 255);
border-bottom-color: rgb(0, 0, 0);
border-bottom-style: solid;
border-bottom-width: 1px;
border-image-outset: 0px;
border-image-repeat: stretch;
border-image-slice: 100%;
border-image-source: none;
border-image-width: 1;
border-left-color: rgb(0, 0, 0);
border-left-style: solid;
border-left-width: 1px;
border-right-color: rgb(0, 0, 0);
border-right-style: solid;
border-right-width: 1px;
border-top-color: rgb(0, 0, 0);
border-top-style: solid;
border-top-width: 1px;
color: rgb(0, 0, 0);
cursor: auto; …Run Code Online (Sandbox Code Playgroud) 我有 HTML 文本区域。我想修改它,使其实现自动缩进,即插入NEWLINE后,我想在新行的开头自动插入空格(空格的数量取决于上一行的缩进)。我发现,我可以通过注册一个监听“按键”事件的处理程序来做到这一点。现在我有一个选择:(a) 保留默认处理程序并在浏览器向 textarea.value 添加换行符后插入空格,或者 (b) 使用 PreventDefault() 并自行插入整个内容(即换行符和空格)。
在情况 (a) 中,如下面的代码所示,我的处理程序在浏览器添加换行符之前执行,因此空格(或用于说明的“--”)最终出现在该行的末尾,而不是在该行的开头新的一个。
在情况 (b) 中,如下面代码中的注释所示,文本被正确修改,但如果它导致光标移出文本区域视图,则内容不会滚动(很可能是因为内容滚动是默认处理的一部分) ),因此光标消失在文本区域边界后面,并且仅当我发送另一个击键(即不是换行符)时才会重新出现。
如何实现自动缩进效果而又不丢失默认滚动效果?
我知道这种效果可能可以通过延迟插入空格(例如使用 setTimeout())来近似,以便运行时有足够的时间来完成默认处理(即插入换行符和垂直滚动),但看起来像对我来说,这是一个巨大的混乱,并且引入了竞争条件,我担心它会在最意想不到的情况下(大量复制粘贴、由于其他操作而导致运行速度缓慢、高键盘重复率等)对我造成打击。理想情况下,我希望 (i) 在默认处理之后调用我的代码,或者 (ii) 能够阻止默认处理、运行我的代码并显式调用默认处理。如何实现?
谢谢!
格雷格
PS:我对集成复杂的文本区域替换不感兴趣,例如Editarea(我使用一个,它在浏览器中非常脆弱)。
在 FF3 上测试。
<html>
<head>
<script type="text/javascript">
function onKeyPressHandler(e) {
if (e.which == 13) // ASCII newline
{
var start = this.selectionStart;
var end = this.selectionEnd;
var v = this.value;
this.value = v.slice(0, start) + '--' + v.slice(end); // (a)
// (b): this.value = v.slice(0, start) + '\n--' + v.slice(end);
// (b): e.preventDefault(); …Run Code Online (Sandbox Code Playgroud)