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

时间:2020-03-05 18:43:52  来源:igfitidea点击:

我有一些继承的C / asp.net代码,其中有一个文本框,我想将其做成多行。我这样做是通过添加textmode =" multiline"来实现的,但是当我尝试插入换行符时,回车键将提交表单:P

我四处搜寻,似乎默认行为应该是输入(或者控制输入)插入换行符。就像我说的那样,我继承了代码,所以我不确定是否有JavaScript在胡闹,或者我只是要做一个简单的asp.net。

解决方案

回答

我怀疑它是(如我们所说的)一些自定义javascript代码。

原始的asp.net控件工作正常...我们将需要检查代码

回答

我们是否正在处理文本框的textchanged事件?这意味着ASP.Net将文本框设置为引起回退(提交页面)的任何可能导致文本框失去焦点的事情,包括回车键。

回答

我创建了一个带有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失去焦点时才触发,因此不会成为问题。

回答

I can't find that "WebForm_FireDefaultButton" javascript anywhere, is it something asp.net is generating?

是的。

生成该代码是为了支持包含控件的窗体和/或者面板的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;
}

回答

@ dave-ward,我只是挖了很多javascript。大多数是由ASP.NET生成的用于验证和AJAX的东西,以" WebForm_"开头的一堆东西我认为是用于执行defaultbutton的标准东西,等等。我们在页面上唯一的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>

回答

事实证明,这是Firefox + ASP.NET的错误,其中为defaultButton东西生成的javascript在Firefox中不起作用。我不得不按如下所述替换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;
}

回答

http://blog.codesta.com/codesta_weblog/2007/12/net-gotchas---p.html为我工作。