Asp.net

阻止 IE 突出顯示表單中的第一個送出按鈕

  • August 31, 2012

在HTML 4.01 規範中似乎未定義在表單中輸入的預期行為,而 HTML 5 規範說它應該是表單中的第一個送出按鈕。

Internet Explorer (IE) 通過添加專有邊框或其他方式在表單具有焦點時突出顯示表單中的第一個按鈕。其他瀏覽器不添加這樣的視覺線索。

我想使用另一個按鈕作為預設按鈕並設置此按鈕的樣式,以便所有瀏覽器都會提供一個視覺線索,表明它是預設按鈕。(我們使用的是每頁使用一個表單的 ASP.NET,因此很難設計頁面以使預設按鈕始終位於第一位。)

雖然我可以在大多數瀏覽器中使用 javascript 和 css 輕鬆完成此操作,但我無法讓 IE 停止突出顯示第一個按鈕。

有什麼方法可以告訴 IE 不突出顯示第一個送出按鈕或突出顯示不同的按鈕?還是我錯過了其他一些解決方案?

在您的 asp.net 按鈕控制項上,設置useSubmitBehavior="false". 這會將 html 呈現為按鈕而不是送出。

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

這至少在 Form 和 Panel 元素上可用:

<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 - 就像您在面板中一樣。

這由 ASP.Net 創建的 onkeypress 方法提供支持。

當頁面載入時,IE 和 Firefox 都會突出顯示 Button2(如您所願)。

如果您知道哪個按鈕將被聲明為預設按鈕,則可以使用通常用於為所有瀏覽器設置樣式的 CSS。

相當煩人的是,當您聚焦任一文本框時,IE 會(錯誤地)突出顯示 Button1。

這是因為 IE 的預設行為被 ASP.Net 發出的一些 javascript 覆蓋:

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

但是,一旦另一個元素獲得焦點,IE 就會忽略這一點,並返回突出顯示錯誤的按鈕(除非使用者在此範例中明確點擊它,否則不會使用該按鈕)。

除了用圖像按鈕替換它們之外,我不確定我還能建議什麼。

引用自:https://stackoverflow.com/questions/442548