2008-12-25 92 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