当前位置:  开发笔记 > 编程语言 > 正文

在onClick事件中更改Javascript焦点?

如何解决《在onClick事件中更改Javascript焦点?》经验,为你挑选了0个好方法。

注意:可能的解决方案只需要在Firefox 3.0中运行,我的应用程序不允许从IE访问!=)

我有一个链接,点击后会向用户显示一个灯箱:

show lightbox

我的问题是,当显示灯箱时,焦点仍然在链接上.因此,如果用户按下向上或向下键,它们最终会滚动主文档,而不是显示的灯箱!

我试图使用这样的代码将焦点设置到灯箱元素

function focus_on_lightbox() {
  document.getElementById('lightbox_content').focus(); 
} 

如果我在firebug控制台中键入它,这可以正常工作,但如果我将它包含在onclick片段的末尾则无效.看起来好像我无法将焦点从onclick事件中执行的代码中的链接改变开来?


- 更新1我之前尝试过这样的事情

show lightbox

我修改了函数来添加一些调试输出,如下所示

function focus_on_lightbox() {
  console.log('hihi');
  console.log(document.activeElement);
  document.getElementById('lightbox_content').focus(); 
  console.log(document.activeElement);
}

输出如下

hihi


所以在我做任何事情之前的重点是在链接上,在我试图改变焦点后它仍然保留在链接上?

不确定是否重要,但我使用ajax加载灯箱,如下所示

  new Ajax.Updater(lightbox_content_id, url, {asynchronous:true, evalScripts:true, onLoading:show_lightbox_loading(), onComplete:focus_on_lightbox() }); 

我试图在ajax完成后设置焦点,但也没有运气.

我错过了什么?


我一直试图通过尝试设置焦点来制作下面建议的解决方案,看看我是否通过检查document.activeElement成功,如果没有,请等待100毫秒再试一次.如果我使用以下功能,它将工作

function focus_on_lightbox() {
  var seconds_waited = 0
  pause(100);
  var current_focus = document.activeElement
  while (document.getElementById(lightbox_content_id) != current_focus && seconds_waited < 2000)
  {
    document.getElementById(lightbox_content_id).focus(); 
    console.log(document.activeElement);
    pause(100);
    current_focus = document.activeElement
    seconds_waited += 100;
  }
}

但是,如果我删除了firebug调试statment console.log,该函数将停止工作!我不知道为什么会这样?为什么输出变量到firebug控制台会影响天气焦点是否移动到元素?console.log语句是否会影响焦点?也许通过将焦点带到控制台调试窗口?

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有