阻止IE突出显示表单中的第一个提交按钮

时间:2009-01-14 10:30:05

标签: asp.net html internet-explorer user-interface

表单中输入的预期行为似乎在HTML 4.01 Specification中未定义,而HTML 5规范says它应该是表单中的第一个提交按钮。

Internet Explorer(IE)通过添加专有边框或其他内容,在表单具有焦点时突出显示表单中的第一个按钮。其他浏览器不会添加这样的视觉线索。

我想使用另一个按钮作为默认设置并设置此按钮的样式,以便所有浏览器都提供一个视觉线索,它是默认按钮。 (我们使用的是每页使用一个表单的ASP.NET,因此很难设计页面,以便始终首先使用默认按钮。)

虽然我可以在大多数浏览器中使用javascript和css轻松完成此操作,但我无法让IE停止突出显示第一个按钮。

有没有办法告诉IE不要突出显示第一个提交按钮或突出显示另一个按钮?或者是否有其他一些我错过的解决方案?

6 个答案:

答案 0 :(得分:15)

在asp.net按钮控件上,设置useSubmitBehavior="false"。这会将html呈现为按钮而不是提交。

答案 1 :(得分:2)

ASP.Net 2.0还引入了DefaultButton的概念。

这可以在至少表格和面板元素上找到:

<form id="form1" runat="server" defaultbutton="Button2">
<div>
    <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
    <br />
    <asp:Button id="Button1" runat="server" text="1st Button" onclick="Button1_Click" />
    <br />
    <br />
    <asp:panel id="something" defaultbutton="button3" runat="server">
        <asp:TextBox id="TextBox2" runat="server"></asp:TextBox>
        <br />
        <asp:Button id="Button2" runat="server" text="2nd Button" onclick="Button2_Click" />
        <br />
        <asp:Button id="Button3" runat="server" text="3rd Button" onclick="Button3_Click" />

    </asp:panel>
    <br />
    <br />

</div>
</form>

因此,当您加载页面或在TextBox1中输入文本时,按Enter键将提交Button2。当您在TextBox2中输入文本时,按Enter将提交Button3 - 就像您在Panel中一样。

这是由ASP.Net创建的onkeypress方法提供支持。

当页面加载时,IE和Firefox都会突出显示Button2(如您所愿)。

如果您知道哪个按钮将被声明为默认按钮,您可以使用通常用于为所有浏览器设置此样式的CSS。

相当烦人的是,当您对焦任一文本框时,IE将(错误地)突出显示Button1。

这是因为IE的默认行为被ASP.Net发出的一些javascript所覆盖:

<script type="text/javascript">
//<![CDATA[
WebForm_AutoFocus('Button2');//]]>
</script>

但是,IE会忽略一旦另一个元素具有焦点,然后返回突出显示错误的按钮(除非用户在此示例中明确地单击它,否则不会使用该按钮)。

除了用图像按钮替换它们外,我不确定我还能建议什么。

答案 2 :(得分:1)

解决此问题的一种方法是在表单顶部创建一个虚拟按钮,并将其移出视线。然后在javascript中处理enter键代码并使用css设置新的默认按钮。

感觉很脏。有更好的想法吗?

答案 3 :(得分:1)

使用其中任何一种CSS样式

a:active, a:focus,input, input:active, input:focus{     outline: 0;     outline-style:none;     outline-width:0; }  
a:active, a:focus,button::-moz-focus-inner, input[type="reset"]::-moz-focus-inner, input[type="button"]::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="file"] > input[type="button"]::-moz-focus-inner 
{     border: none; } 

OR

:focus {outline:none;} ::-moz-focus-inner {border:0;}

完成CSS样式部分后,您可能还需要设置IE-Emulator。更新您的Web应用程序web.config文件并包含以下密钥。

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=7; IE=9; IE=8; IE=5;" />
      </customHeaders>
    </httpProtocol>

  </system.webServer>

答案 4 :(得分:0)

如果您使用.Net 2 this可能会帮助您

  

...使用DefaultFocus属性   访问表单上的控件   显示为带输入的控件   HtmlForm控件时的焦点   加载。 可以选择的控件   用视觉提示显示   表明他们有焦点。   例如,一个TextBox控件   插入时显示焦点   位于其内部的点。 ...

答案 5 :(得分:-1)

如何为此按钮定义特定的CSS样式(或类)?

<input type="button" value="basic button" .../>
<input type="button" style="border: solid 2px red;" value="default button" .../>