使用 Focus() 指令強迫網頁定位在指定位置

自從 ASP.NET 2.0 之後我們就多了一個 Focus() 指令可以使用。不過如果你真的下了這個指令, 你可能會產生一個疑惑: 到底要怎麼用才對? 因為這個指令似乎並不是每次都靈光...

 

自從 ASP.NET 2.0 之後我們就多了一個 Focus() 指令可以使用。不過如果你真的下了這個指令, 你可能會產生一個疑惑: 到底要怎麼用才對? 因為這個指令似乎並不是每次都靈光。

以下我提供我個人最常用的做法。基本上, 我如果會使用到這個指令, 通常是當我在網頁某處顯示了某個字串之後, 希望網頁能自動翻到那個位置讓瀏覽者看見。但如果你是把訊息丟到 Label 物件中, 然後再下達 Label1.Focus() 這樣的指令的話, 你會發現那是沒用的。

那麼指令到底應該怎麼下才對? 其實關鍵點就在於你不應該對 Label 物件下 Focus() 指令。Focus() 對於 Label 物件不會發生作用! 它只對實際上能在網頁中產生控制項的物件有作用, 我都用在 TextBox 上面 (其實像 DropDownList 也行, 只是我習慣使用 TextBox)。不過 TextBox 會在畫面中畫出一個實際的文字方塊, 你得把它移到畫面之外才不會影響美觀。如下範例:

<asp:Label runat="server" ID="lbDetails" />
<asp:TextBox runat="server" ID="txtBottom" style='position: absolute; left: -5000px; ' />

在上例中, txtBottom 是沒有任何作用的, 它只用來定位而已; 實際上我想顯示的是 lbDetails 的內容。在這裡我把 txtBottom 的位置挪到視窗左方 -5000px 的地方, 以確保它絕對不會被顯示 (你必須使用負值! 如果你不相信, 你不妨把它變成正值試試)。

之後, 你就可以在程式中適當的地方下達 txtBottom.Focus() 了!


Dev 2Share @ 點部落