asp.net textarea 换行和防止回发返回键

Posted

技术标签:

【中文标题】asp.net textarea 换行和防止回发返回键【英文标题】:asp.net textarea line feed and preventing postback on return key 【发布时间】:2013-09-12 23:20:28 【问题描述】:

我有一个包含许多页面的 ASP.net Web 应用程序。 他们中的大多数都有 Multiline APS.net 文本框和标准文本框。根据浏览器、页面、上次使用的控件,按返回键会产生意外结果。它可以触发任何控件,无论是主页面还是子页面。有时按回车键甚至会触发注销控件。

所以为了防止这种情况,我添加了:

body onkeydown="return (event.keyCode!=13)"

在许多地方推荐的母版页正文标记中,这就像一个魅力。 但是,这会导致返回键不响应文本区域中的换行。 用户需要能够在文本区域中插入换行符(TextBoxMode.MultiLine)

如何防止这种行为?

【问题讨论】:

【参考方案1】:

你可以用这个

window.onload = function() 
    setEvent("text", onKeyDown);


function onKeyDown()

   return (event.keyCode!=13)

仅在文本框中取消返回按钮

【讨论】:

谢谢,有一个重大的改进,但这对 Textarea 和 input type="text" 的处理是一样的。并且不连贯的回发仍然发生在集中的空单行文本上。我试图将文本更改为 textarea。但它不起作用。 @Lambda - 无法理解你的意思:( 我需要的是停止所有 key13 回发的东西,但让我在 textarea 中插入换行符。您的解决方案在未选择文本时会停止回发,但在选择单行文本(输入类型=文本)时仍会创建回发。我想我可能有一个解决方案,将 onkeydown 事件与 onkeyup 事件分开,但还没有工作。【参考方案2】:

找到了解决办法: 保持:

body onkeydown="return (event.keyCode!=13)"

这将禁用使用返回键的任何回发, 然后将以下属性添加到任何多行文本框:

TextBox1.Attributes.Add("onkeyup", "EnterEvent(event,this)");

使用以下 javascript

// add Line feed in text area.
function EnterEvent(e,ctl) 
    var keycode = (e.keyCode ? e.keyCode : e.which);
    if (keycode == 13) 

    var st1 = $(ctl).textrange('get', 'start');
    var l = ctl.value.length;
    if (st1 < l) 
        $(ctl).textrange('replace', '\n');
        $(ctl).textrange('set', st1 + 1, 0);
    
    else 
        ctl.value = ctl.value + '\n';
    
    


这个“手动”在返回键事件中插入 LF。

【讨论】:

如果用户在文本中间按下回车键会怎样? 这是正确的,在编辑的版本中,我使用 jquery textrange 在中间插入 '\n' 然后在它后面设置光标。

以上是关于asp.net textarea 换行和防止回发返回键的主要内容,如果未能解决你的问题,请参考以下文章

asp.net里的textarea标签不能换行怎么办

ASP.NET 剃须刀 Html.TextArea

Google Chrome textareas 换行和添加换行符

由一个项目需求引发的 - textarea中的换行和空格

JTextArea与TextArea自动换行和滚动条的区别对比

防止 ASP.net __doPostback() 来自 UpdatePanel 中的 jQuery submit()