我的 aspx 页面上有一个文本框、一个按钮和一个“AdvancedSearch”链接。页面加载时,焦点设置到文本框。单击“高级搜索”链接后,将打开一个灯箱(覆盖)窗口。我想将焦点设置到此灯箱窗口中存在的文本框。我正在使用 javascript 来实现这一点。代码看起来有点像这样:
if( element.type != "隐藏"&& element.style.display != "无"&& !element.disabled ) {
element.focus();
返回;
}
加载灯箱窗口时,我收到 JavaScript 错误 - “无法将焦点移至控件,因为它不可见、未启用或属于不接受焦点的类型”
知道为什么会抛出此错误以及为什么它无法将焦点设置到灯箱窗口中的文本框吗?
谢谢, 瑞沙布。
最佳答案
正如 @Stephen 所评论的,该元素可能位于隐藏容器中,如果您存在验证脚本(您的页面至少包含一个验证控件),那么您可以使用 IsInVisibleContainer
函数(asp 的一部分) .net 验证脚本)。
如果没有,您可以包含以下功能:
function IsInVisibleContainer(ctrl) {
if (typeof(ctrl.style) != "undefined" &&
( ( typeof(ctrl.style.display) != "undefined" &&
ctrl.style.display == "none") ||
( typeof(ctrl.style.visibility) != "undefined" &&
ctrl.style.visibility == "hidden") ) ) {
return false;
}
else if (typeof(ctrl.parentNode) != "undefined" &&
ctrl.parentNode != null &&
ctrl.parentNode != ctrl) {
return IsInVisibleContainer(ctrl.parentNode);
}
return true;
}
然后延迟设置焦点直到容器变得可见:
function setFocus(){
if(element.type != "hidden" && !element.disabled) {
if(IsInVisibleContainer(element))
element.focus();
else
window.setTimeout(setFocus,100);
}
}
关于c# - 将焦点设置到灯箱(覆盖)窗口内的文本框时出现 JavaScript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3004530/