2008-12-25 76 views
1

我試圖添加一個CSS類到控件,一旦呈現頁面將獲得焦點。雖然Page類的SetFocus()方法允許我設置控件,但沒有相應的GetFocus()方法。找出聚焦的控件

根據.Net資源,這些信息存儲在Page類的私有成員_focusedControl中。屬性FocusedControl標記爲內部。

有沒有辦法通過使用Reflection來獲取私有成員或內部屬性的值?

任何幫助將不勝感激。

澄清: 這是爲什麼我要添加的CssClass服務器端:我想申請以下 jQuery腳本,改變聚焦元素的背景:

$(document).ready(function() { 
    var elements = jQuery("textarea, select, multi-select, :text, :password, :file"); 

    elements.bind 
    (
    'focus', 
    function() { 
     jQuery(this).addClass('highlightinput'); 
    } 
); 

    elements.bind 
    (
    'blur', 
    function() { 
     jQuery(this).removeClass('highlightinput'); 
    } 
); 
}) 

這隻要我沒有專門在我的aspx.vb中設置一個集中控制,就可以正常工作。如果我確實設置了一個集中控制(我認爲是由於時間問題),那麼在將我的處理程序連接到輸入字段之前設置焦點,因此輸入未突出顯示。所以我的方法是在呈現頁面之前將highlightinput類添加到焦點控件。

回答

1

重點控制可能在後備之間發生變化,這就是爲什麼我不認爲你可以輕鬆找到它。在ViewState中保持每個控件的整個狀態可能過於昂貴。

也許你可以使用javascript來跟蹤哪個控件在客戶端的隱藏字段中有焦點,並在服務器上讀取它。

+0

這是正確的。不過,我不需要這些信息來回傳。我只需要知道傳遞給SetFocus方法的最後一個控件。 – schudel 2008-12-25 19:59:15

2

如果您正在尋找突出顯示焦點元素的css解決方案,我相信您可以使用':focus'選擇器。我沒有嘗試過,但我相信這是一個有效的選擇。你會在你的CSS文件中使用它,如下所示:

:focus{ background-color: yellow;}
+0

謝謝Yobi21,這在Firefox中正常工作,但它不支持IE – schudel 2008-12-27 14:08:21

0

爲什麼不直接做這一切通過JavaScript?喜歡的東西:

body.onLoad = function() { document.activeElement.style.color = '#ff0000'}

這可能是馬車,但我認爲這是一個良好的開端。

+0

謝謝肖恩,我試過了,但我無法讓它工作。我寧願知道服務器端哪個控件將獲得焦點。 – schudel 2008-12-27 14:15:20

0

我不知道如果我理解正確你的問題......

你不能只是添加的CssClass來控制你的焦點設置在服務器端?

controlObj).CssClass = "highlightinput" 
Page.SetFocus(controlObj) 
+0

問題是,Page.SetFocus由我無法控制的組件調用。所以我想弄清楚,一旦頁面被渲染,我們就可以設置額外的CssClass。此外,我想要一個通用的方法,我可以添加到基類 – schudel 2008-12-31 11:03:31