Firefox中的Asp.Net Form DefaultButton错误

fra*_*der 5 asp.net firefox textarea webforms

具有"DefaultButton"属性集的表单的.Net生成的代码包含较差的javascript,允许该功能在IE中工作,但在其他浏览器中不起作用(特别是Firefox).

点击回车密钥确实提交了所有浏览器的表单,但Firefox在<textarea>控件内发生时无法忽略按键.结果是多行文本区域控件在Firefox中不能是多行,因为输入键提交表单而不是创建新行.

有关该错误的更多信息,请在此处阅读.

这可以在Asp.Net 3.0+中修复,但仍然需要为2.0创建一个解决方法.

对于最轻微的解决方法的任何想法(一个看起来不像黑客的黑客= D)?上面链接中的解决方案让我有点害怕,因为它很容易产生意想不到的副作用.

har*_*rpo 4

我使用这个改编自codesta的函数。[编辑:同一个,我明白了,这让你害怕!哎呀。那我帮不了你了。]

http://blog.codesta.com/codesta_weblog/2007/12/net-gotchas---p.html

您可以通过像这样用 div 包围您的代码来使用它。您可以对表单进行子类化以自动包含此内容。我用的不多,所以没用。

<div onkeypress="return FireDefaultButton(event, '<%= aspButtonID.ClientID %>')">
    (您的表格位于此处)
</div>

这是函数。

函数 FireDefaultButton(事件,目标)
{
    // srcElement 适用于 IE
    var 元素 = event.target || 事件.srcElement;

    if (13 == event.keyCode && !(element && "textarea" == element.tagName.toLowerCase()))
    {
        var 默认按钮;
        defaultButton = document.getElementById(target);

        if (defaultButton && "未定义" != typeof defaultButton.click)
        {
            默认按钮.click();
            event.cancelBubble = true;
            if (事件.stopPropagation)
                event.stopPropagation();
            返回假;
        }
    }
    返回真;
}