问题引子:项目基本设计中要求每一个页面弹出时焦点要求在页面上第一个可以拥有焦点的控件上,基本实现如下:
document.getelementbyid("text1").fouce(); 个人想实现共通方法,关键是要找到页面上的第一个控件。
jquery尝试实现:
$.("input")[0].fouce();
考虑到有些控件并不一定是<input>控件 比如说select 所以失败。提问1:各位大侠,说说你们的想法,或者已经实现过的可以贴贴自己珍贵的代码,有思路的说个思路,本人会去尝试,实现后贴出代码,谢谢!
本人思路:遍历全部节点,判断控件是否可以成为焦点的控件,将空间设为焦点,返回。提问2:因为是要找到控件,遍历如何实现?
提问3:如何判断节点上控件是可以拥有焦点呢?
document.getelementbyid("text1").fouce(); 个人想实现共通方法,关键是要找到页面上的第一个控件。
jquery尝试实现:
$.("input")[0].fouce();
考虑到有些控件并不一定是<input>控件 比如说select 所以失败。提问1:各位大侠,说说你们的想法,或者已经实现过的可以贴贴自己珍贵的代码,有思路的说个思路,本人会去尝试,实现后贴出代码,谢谢!
本人思路:遍历全部节点,判断控件是否可以成为焦点的控件,将空间设为焦点,返回。提问2:因为是要找到控件,遍历如何实现?
提问3:如何判断节点上控件是可以拥有焦点呢?
for (int i = 0; i < this.Controls.Count; i++)
{
foreach (Control control in this.Controls[i].Controls)
{
if (control.HasControls())
{
//子控件
}
else
{
if (control is Label)
{
count++;
}
}
}
}
改成:document.getelementbyid("text1").focus();
var elements = document.getElementsByTagName("*");
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if (((/^input$/i.test(element.tagName) && /^(text|checkbox|radio|radio)$/i.test(element.type) && !element.readonly) ||
(/^textarea$/i.test(element.tagName) && !element.readonly) ||
(/^select$/i.test(element.tagName))) &&
!element.disabled) {
var style = element.currentStyle || document.defaultView.getComputedStyle(element, null);
if (style.display == "none" || style.visibility == "hidden") continue;
element.focus();
break;
}
}
zswang 你好 感谢你的回答,我会参考你的代码,我的思路其实也是如此,我会尽快结贴的,谢谢!