输入键以在asp.net多行文本框控件中插入换行符

时间:2008-08-27 14:12:31

标签: asp.net

我有一些我继承的C#/ asp.net代码,它有一个我想制作多行的文本框。我这样做是通过添加textmode =“multiline”来实现的,但是当我尝试插入换行符时,输入键会提交表单:P

我用Google搜索,似乎默认行为应该是输入(或控制输入)来插入换行符。就像我说的那样,我继承了代码所以我不确定是否有javascript周围的问题,或者我是否只需要一个简单的asp.net事件。

8 个答案:

答案 0 :(得分:4)

事实证明这是Firefox + ASP.NET的一个错误,其中生成的defaultButton内容的javascript在Firefox中不起作用。我必须按照here描述的方式替换WebForm_FireDefatultButton函数:

function WebForm_FireDefaultButton(event, target) {
    var element = event.target || event.srcElement;
    if (event.keyCode == 13 &&
    !(element &&
    element.tagName.toLowerCase() == "textarea"))
    {
        var defaultButton;
        if (__nonMSDOMBrowser)
        {
            defaultButton = document.getElementById(target);
        }
        else
        {
            defaultButton = document.all[target];
        }
        if (defaultButton && typeof defaultButton.click != "undefined")
        {
            defaultButton.click();
            event.cancelBubble = true;
            if (event.stopPropagation)
            {
                event.stopPropagation();
            }
            return false;
        }
    }
    return true;
}

答案 1 :(得分:1)

我创建了一个带有TextBox和Button的示例页面,它对我来说很好用:

<asp:TextBox runat="server" ID="textbox1" TextMode="MultiLine" />
<br />
<br />
<asp:Button runat="server" ID="button1" Text="Button 1" onclick="button1_Click" />

因此,它很可能取决于您设置的其他属性或表单上的其他控件。

编辑:TextChanged事件仅在TextBox失去焦点时触发,因此不会出现问题。

答案 2 :(得分:1)

  

我无法在任何地方找到“WebForm_FireDefaultButton”javascript,这是asp.net正在生成的东西吗?

这是为了支持包含控件的表单和/或Panel的 DefaultButton 功能而生成的。这是它的来源:

function WebForm_FireDefaultButton(event, target) {
  if (event.keyCode == 13) {
    var src = event.srcElement || event.target;
    if (!src || (src.tagName.toLowerCase() != "textarea")) {
      var defaultButton;
      if (__nonMSDOMBrowser) {
        defaultButton = document.getElementById(target);
      }
      else {
        defaultButton = document.all[target];
      }
      if (defaultButton && typeof (defaultButton.click) != "undefined") {
        defaultButton.click();
        event.cancelBubble = true;
        if (event.stopPropagation) event.stopPropagation();
        return false;
      }
    }
  }
  return true;
}

答案 3 :(得分:0)

我怀疑它(就像你说的)一些自定义的javascript代码。

原始的asp.net控件工作正常......你将不得不检查代码

答案 4 :(得分:0)

您是否正在处理文本框的textchanged事件?这意味着ASP.Net会设置文本框,以便为可能导致文本框失去焦点的任何内容(包括回车键)引发回发(提交页面)。

答案 5 :(得分:0)

@ dave-ward,我只是挖了一堆javascript。大多数是ASP.NET生成的验证和AJAX的东西,有一堆以“WebForm_”开头,我认为是默认按钮等标准的东西,我们在页面上放置的唯一的javascript是切换可见性和做一些自定义验证...

编辑:我确实找到了以下内容。我不明白这一点:P是textarea所在表单的开头,后面是一个脚本:(注意,stackoverflow上的内容正在弄乱下划线)

<form name="Form1" method="post" action="default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="Form1">

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
    theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

答案 6 :(得分:0)

答案 7 :(得分:-1)

您可以使用\ n输入密钥 即   [a-zA-Z 0-9 /。\ n] {20,500}