我正在尝试将一个CSS类添加到Control中,一旦呈现页面,它将获得焦点。虽然Page类的SetFocus()方法允许我设置Control,但是没有相应的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类添加到聚焦控件。
答案 0 :(得分:2)
如果您正在寻找用于突出显示聚焦元素的CSS解决方案,我相信您可以使用':focus'选择器。我没试过,但我相信这是一个有效的选择器。您可以在css文件中使用它:
:focus{ background-color: yellow;}
答案 1 :(得分:1)
焦点控制可能在回发之间发生了变化,这就是为什么我认为你不能轻易找到它。在ViewState中保持每个控件的整个状态可能太昂贵了。
也许你可以使用javascript跟踪哪个控件在客户端的隐藏字段中有焦点,并在服务器上读取它。
答案 2 :(得分:0)
为什么不通过JavaScript完成所有操作?类似的东西:
body.onLoad = function() { document.activeElement.style.color = '#ff0000'}
这可能是错误的,但我认为这是一个好的开始。
答案 3 :(得分:0)
我不知道我是否理解你的问题......
难道你不能只将cssclass添加到服务器端设置焦点的控件上吗?
controlObj).CssClass = "highlightinput"
Page.SetFocus(controlObj)