JavaScript使用focus()设置焦点失败的解决方法
作者:bea
昨天修改机顶盒上面的EPG页面,遇到一个小问题。用户购买游戏时需要弹出购买确认对话框,对话框的默认焦点规定必须停留在“取消”按键上。很简单的需求,使用JavaScript的focus()方法就可以实现了。简单的代码示例如下: document.getElementById("cancel").focus() 但是苦逼的是,机顶盒真是一个大坑。由于要兼容所有现存的机顶盒型号,需要对8款机顶盒进行适配。然后就出现问题了!一款中兴B600的机顶盒完全没法将焦点设置到取消按键上
昨天修改机顶盒上面的EPG页面,遇到一个小问题。用户购买游戏时需要弹出购买确认对话框,对话框的默认焦点规定必须停留在“取消”按键上。很简单的需求,使用JavaScript的focus()方法就可以实现了。简单的代码示例如下:
document.getElementById("cancel").focus()
但是苦逼的是,机顶盒真是一个大坑。由于要兼容所有现存的机顶盒型号,需要对8款机顶盒进行适配。然后就出现问题了!一款中兴B600的机顶盒完全没法将焦点设置到取消按键上。以下是我的解决思路:
首先确认该机顶盒是否支持getElementById()方法以及是否成功获得了ID为“cancel”的元素:测试方法很简单,直接另写了一个 <p id="test">test</p> ,然后在同样的地方获取ID为“test”的元素,并进行了简单的操作document.getElementById("test").innerHTML="Hello"
最后使用了“try...catch(e)...”捕捉“focus()”失败的原因
try(){
<span style="white-space:pre"> </span>document.getElementById("cancel").focus()
}catch(e){
<span style="white-space:pre"> </span>alert(e.name + ": " + e.what());
}
但是就是很奇怪!以上两步的结果表明该机顶盒支持focus()和getElementById(),但是就是无法设置焦点到弹出的对话框中。
前前后后折腾了一个多小时,最后大BOSS出现了,就简单说了一句话就解决了这个问题!有可能要主动调用flur()将原来的焦点取消掉!
document.getElementById("purchase").flur()
然后就解决了这个问题。不得不感概!在解决这个问题的过程中,自己的思路其实还是蛮正确的,但知识面显然不够。一般程序员和高级程序员的差距除了解决问题的思路方面,也有经验和知识面的差距!
猜你喜欢
您可能感兴趣的文章:
- 用console.table()调试javascript
- js设置cookie过期当前时间减去一秒相当于立即过期
- jQuery之Deferred对象详解
- Javascript Objects详解
- 加随机数引入脚本不让浏览器读取缓存
- js不能获取隐藏的div的宽度只能先显示后获取
- 点击A元素触发B元素的事件在IE8下会识别成A元素
- Flexigrid在IE下不显示数据的有效处理方法
- js自动生成的元素与页面原有元素发生堆叠的解决方法
- 告诉你什么是javascript的回调函数
- jquery学习总结(超级详细)
- JavaScript实现按Ctrl键打开新页面
- js实现图片在未加载完成前显示加载中字样
- jquery.idTabs 选项卡使用示例代码
- jQuery 1.9移除了$.browser可以使用$.support来替代
- JavaScript用JQuery呼叫Server端方法示例代码
- 禁止iframe页面的所有js脚本如alert及弹出窗口等
- 禁用页面部分JavaScript不是全部而是部分
- 让JavaScript的Alert弹出框失效的方法禁止弹出警告框