c# - 将焦点设置到灯箱(覆盖)窗口内的文本框时出现 JavaScript 错误

标签 c# asp.net javascript

我的 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/

相关文章:

c# - 断言文本已输入 - Selenium Web Driver

c# - 我的 SQL 语句有什么问题,有些东西不工作

c# - ASP.Net Linq 到实体 : An attempt to attach an auto-named database failed

javascript - 不完全理解这个闭包是如何工作的

javascript - moment.js 解析语言和时区的日期

c# - 测试通用类

c# - 如何在 ASP.NET Core 中启用 CORS

C# 标准输入/标准输出性能

asp.net - 401 向 web api 发送 ajax 请求时未经授权

javascript - 将占位符添加到多个谷歌图表字符串过滤器